【发布时间】:2021-07-05 20:14:47
【问题描述】:
在 gdb 中,我似乎无法访问任何伪寄存器:r8b、r9b、r10b、r11b、r12b、r13b、r14b 或 @ 987654331@(但是,r15d 和 r15w 似乎可以工作,sil 也是如此)。
看一个例子:
section .text
global main
main:
xor esi, esi
mov sil, 0x1f
xor r13d, r13d
mov r13b, sil
ret
与gdb一起运行:
(gdb) p $sil
$1 = -15
(gdb) p $r13
$2 = 241
(gdb) p $r13b
$3 = void
(gdb) p /x $r13b
$4 = 0x0
我在gdb manual 中找不到任何内容,并且它们不是使用info all-registers 命令打印的。我正在使用 GDB 10。
【问题讨论】:
-
这已经出现过几次了,就像Unable to set the lowest byte in a register x86-64?(Ruslan 的回答链接了你所做的相同的 GDB 错误)和Moving indirect-addressed value into AL works, but moving it into an 8-bit rXb register doesn't in yasm。这个有一个更好的标题,所以我关闭了其他的作为这个好的规范问答的副本。
-
等一下,在您的 NASM 源代码中,我认为您的意思是
mov r13b, sil,因为mov r13, sil是操作数大小不匹配的问题。 (另外,通常你会使用movzx r13d, sil而不是 xor-zero 和字节 mov,但这个例子的重点是表明 NASM 理解 GDB 不理解的寄存器名称。) -
@PeterCordes,感谢您修复代码!是的,我是在事后编写代码的,可能有错误的指令:P。感谢您的指点,我错过了另一个stackoverflow问题......我搜索了这个但找不到太多信息,所以最终查看了gdb代码。
标签: gdb x86-64 cpu-registers