yasm相关内容

对于 .bss 中的符号和 .data 中的符号,gdb 的行为有所不同

我最近开始使用 YASM 为 Intel x86-64 架构学习汇编语言.在解决一本书(Ray Seyfarth 着)中建议的一项任务时,我遇到了以下问题: 当我将一些字符放入 .bss 部分的缓冲区中时,我在 gdb 中调试它时仍然看到一个空字符串.将字符放入 .data 部分的缓冲区中会在 gdb 中按预期显示. segment .bss结果 resb 75缓冲恢复 100使用请求 1 ..
发布时间:2022-01-06 13:08:48 其他开发

tword、oword 和 yword 操作数的大小是多少?

NASM/YASM 手册?在相关说明中,这些名称是否有技巧或潜在的想法?有没有办法给更大的字长指定逻辑名称? 我知道虽然系统之间的字长可能不同,但 NASM word 是 2 个字节,dword 是两倍(4 个字节),qword 是一个四字(8 个字节),但是……tword 是一个三字(6 个字节)吗?对于 oword 和 yword,我什至想不出合理的含义. 请注意,这可能是一个简单 ..
发布时间:2021-12-18 09:20:13 其他开发

YASM/NASM x86 汇编中立即数与方括号的基本使用

假设我声明了以下内容: section .bss缓冲区 resb 1 这些说明在section .text: mov al, 5 ;立即移动mov [缓冲区], al ;店铺mov bl, [缓冲区] ;加载mov cl, 缓冲区;立即移动? 我是否正确理解 bl 将包含值 5,而 cl 将包含变量 buffer 的内存地址? 我对 之间的差异感到困惑 将立即数移入寄存器, 将 ..
发布时间:2021-11-30 11:14:13 其他开发

无法从汇编 (yasm) 代码调用 64 位 Linux 上的 C 标准库函数

我有一个用汇编编写并在 Linux (Ubuntu) 64 位上用 yasm 和 GCC 编译的函数 foo.它只是使用 puts() 将消息打印到标准输出,如下所示: 位 64外部看跌期权全局 foo.data 节信息:db 'foo() 调用', 0节.text富:推RBPmov rbp, rsplea rdi, [rel 消息]看涨期权流行音乐退 它被一个用 GCC 编译的 C 程序调用 ..
发布时间:2021-11-30 11:10:57 服务器开发

平均字节数

我正在计算 3 分的平均值: g0 dw 70g1 干重 100g2 dw 65 与 xor rax, rax异或 rcx, rcx移动斧头,[g0]包括 rcx添加斧头,[g1]包括 rcx添加斧头,[g2]包括 rcx异或 rdx, rdxidv rcx 成绩不需要是单词,因为对于平均值来说字节就足够了,但总和必须是一个单词以避免溢出(即使用此算法). 如何将成绩转换为字节?使用 ..
发布时间:2021-11-25 06:10:46 C#

组装 - 在偏移量为 5 的寄存器/数组中移动

快速提问.此代码不会编译: mov eax, dword [rbx+rsi*5] 我不指望它,并解释说 mov 和乘法是两种不同的 CPU 操作.可以实现的唯一原因是通过位移. 但是,这确实可以编译: mov eax, dword [lst+rsi*5] “lst"是一个变量数组.在上下文中使用时它也会产生输出(因此代码编译和运行).为什么会这样? yasm -Worphan-la ..
发布时间:2021-09-29 19:47:28 其他开发

平均字节数

我正在计算 3 分的平均值: g0 dw 70g1 干重 100g2 dw 65 与 xor rax, rax异或 rcx, rcx移动斧头,[g0]包括 rcx添加斧头,[g1]包括 rcx添加斧头,[g2]包括 rcx异或 rdx, rdxidv rcx 成绩不需要是单词,因为对于平均值来说字节就足够了,但是总和必须是一个单词以避免溢出(使用这个算法,就是这样). 如何将成绩转换 ..
发布时间:2021-09-29 19:45:04 其他开发

Gnu 汇编程序给出了意外的内存操作数

GNU 汇编器在汇编 Intel 语法代码时给出了意外的内存操作数. 我已将我的错误减少到一行单独的代码,并且在过去的三天里,我尝试了任何方法来理解为什么 GNU 汇编器会产生一些我无法理解的东西.我知道这必须(或应该)是微不足道的,但我不知所措. 以下文本驻留在文件 code.asm 中: .intel_syntax noprefix.global 一些代码一些代码:输入 3mov ..
发布时间:2021-09-29 19:44:49 其他开发

Yasm 使用 intel 语法编译 64 位代码

我有这个文件: .code64弹出 %rbx 使用带有以下指令的 yasm 可以很好地编译: yasm.exe asm.asm -o asm.bin -m amd64 --parser=gas 我的问题是:有没有办法使用 nasm 解析器通过使用 intel 语法来编译 64 位代码?我真的不喜欢 AT&T 语法 解决方案 参见 关于 BITS 指令的 yasm 手册. 位 64 ..
发布时间:2021-09-29 19:39:43 其他开发

将间接寻址的值移入 AL 有效,但将其移入 8 位 rXb 寄存器在 yasm 中不起作用

我在 .data 中声明了一个字节数组 chars db 'spipopd' 并且我已将 rdi 设置为指向此数组的基本索引 mov rdi, 字符 在某些时候,我想将数组中的一个字符放入一个 8 位寄存器中.下面的第一个语句产生一个有效值,但第二个语句在输入 gdb 命令 print $r9b 时导致 r9b 包含 void. mov al, [rdi] ;在 gdb 中产生有效值mo ..
发布时间:2021-06-07 18:43:52 其他开发

即使安装了Yasm也找不到

我遇到一个奇怪的问题.我尝试安装x264.当运行sudo ./configure --enable-shared时,它给出了: 未找到汇编器最低版本是yasm-0.7.0如果您确实要在没有asm的情况下进行编译,请使用--disable-asm进行配置. 但是我已经安装了yasm-0.7.0,以证明我运行了yasm --version,它给出了: * yasm 0.7.0.206 ..
发布时间:2021-05-29 23:14:46 服务器开发

与.data中的符号相比,gdb对于.bss中的符号的行为有所不同

我最近开始使用YASM学习用于Intel x86-64体系结构的汇编语言.在解决一本书(由雷·赛法斯(Ray Seyfarth)提出)中建议的一项任务时,我遇到了以下问题: 当我在.bss部分的缓冲区中放置一些字符时,在gdb中调试它时仍然看到一个空字符串.将字符放入.data节中的缓冲区中,将按预期在gdb中显示. segment .bss result resb 75 bu ..
发布时间:2020-09-12 22:48:03 其他开发

yasm movsx,movsxd操作数2的无效大小

我正在尝试使用yasm汇编以下代码.我在"yasm"报告错误“错误:操作数2的大小无效"的地方添加了“此处"注释.为什么会发生此错误? segment .data a db 25 b dw 0xffff c dd 3456 d dq -14 segment .bss res resq 1 segment .text global _star ..
发布时间:2020-09-12 22:09:00 其他开发

最小操作码大小x86-64 strlen实现

我正在研究最小操作码大小 x86-64 strlen 的实现,该代码实现的高尔夫/二进制可执行文件的大小不应该超过某些大小(请考虑一下demoscene for简单). 总体思路来自此处,尺寸优化思路来自输入字符串地址在rdi中,最大长度应不大于Int32 xor eax,eax ; 2 bytes or ecx,-1 ; 3 bytes repne scasb ; 2 b ..
发布时间:2020-05-16 21:09:17 其他开发

评论以反斜杠结尾后,NASM/Yasm放弃了致电

我目前正在尝试构建自己的引导加载程序,并发现一些奇怪的东西. 当下面的代码与NASM或Yasm一起汇编而没有标记的NOP命令时,二进制文件中将缺少以下CALL.带有NOP时,CALL会正确组装,但是二进制代码中不存在操作码0x90(NOP)(由于NOP的性质,后来可以理解). to_hex_ascii: add al, '0' cmp al, 0x3a ..
发布时间:2020-05-16 21:06:13 其他开发

第二,oword和yword操作数的大小是多少?

tword,oword和yword操作数的大小是多少,如我知道,尽管系统之间的字长可能有所不同,但NASM word是2字节,dword是2字节(4字节)的两倍,qword是四字(8字节),但是... tword是三词(6个字节)吗?对于oword和yword,我什至都没有想到合理的含义. 请注意,这可能是一个简单的问题,但我找不到答案.在NASM和YASM手册中,甚至在DQ,DT,DY,R ..
发布时间:2020-05-16 21:02:45 其他开发