reg*_*_mr 2 64-bit assembly x86-64 nasm
当它编译汇编代码(如先前认为的 x64)并尝试将以下数据加载到堆栈中时,我有一个问题:
mov rax, "AAAAAAAAA"; flax == 9
push rax
Run Code Online (Sandbox Code Playgroud)
得到消息:
warning: character constant too long [-w + other]
Run Code Online (Sandbox Code Playgroud)
我知道这只是一个警告,但我认为它在 64 位寄存器上运行,这也由它们的名称指示。
系统是 64 位 Debian(我认为)。该程序还编译为 64 位二进制文件:
nasm - f elf64
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释,或者至少给我一些关键字,如何深入研究这个主题:)
小智 5
如果仔细观察:
mov rax, “AAAAAAAAA”; flax == 9
Run Code Online (Sandbox Code Playgroud)
该字符串实际上包含 9'A'秒。每个字符都是 1 个字节,所以是 8 位。这意味着,在 64 位寄存器中,您只能有 8 个,因为 8 个字符 * 8 位/字符 = 64 位。
要编写十六进制常量,请mov rax, 0xAAAAAAAAA在 C 中使用类似的方法。 NASM 中的单引号或双引号为您提供(多个)ASCII 字符作为按源顺序获取 ASCII 字符的 little-endian 整数值。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |