GDB:使用 x 命令读取不起作用
GDB: reading with the x command doesn't work
我正在尝试对 ELF 64 位程序进行逆向工程。
我在<strcmp@plt>
的指针上设置了一个断点。我读到 here 正在比较的值存储在 rax
和 rbx
中。当我使用 x
命令时(这里我使用 x/s
命令来获取字符串输出,但我也尝试过使用 x
)我收到一条错误消息 <error: Cannont access memory at address *some address*>
,确切的命令是x/s $rax
。 print
函数确实有效,但这给了我原始数据(我认为是十六进制?)我需要字符串,有没有办法将值转换为字符串?
我的系统是 64 位 windows 10,我在 windows.
的 linux 子系统中使用 gdb
编辑
我用 gdb R
(程序名称)开始我的 GDB 会话
节目信息:
然后我 运行 disass main
找到我的输入比较的地址,这就是 strcmp@plt
所在的位置。
我复制地址并使用 b * 0x8001168
设置断点。
我插入断点后,我运行run TestArg
。
现在程序在我的断点处停止了。
我运行info registers
看看里面有没有东西,有。
当我尝试 x/s $rax
时,我得到以下输出。
print
命令确实有效,但我需要字符串值。
I read here that the values that are being compared are stored in rax and rbx.
那个博客 post 似乎是完全错误的—— strcmp()
的参数不可能在 rax
和 rbx
上 x86_64
] -- Linux / x86_64 calling convention 要求 它们位于 rdi
和 rsi
.
查看它们的寄存器值,rax
恰好 包含与 rdi
相同的值,并且 rdx
碰巧 包含与 rsi
.
相同的值
他们
的事实
- 使用
rax
和 rdx
而不提及(或明显理解)为什么
- 实际上并没有显示他们所指的反汇编
表示低质量的内容。您可能应该停止阅读此来源,并使用更可靠的东西。
我正在尝试对 ELF 64 位程序进行逆向工程。
我在<strcmp@plt>
的指针上设置了一个断点。我读到 here 正在比较的值存储在 rax
和 rbx
中。当我使用 x
命令时(这里我使用 x/s
命令来获取字符串输出,但我也尝试过使用 x
)我收到一条错误消息 <error: Cannont access memory at address *some address*>
,确切的命令是x/s $rax
。 print
函数确实有效,但这给了我原始数据(我认为是十六进制?)我需要字符串,有没有办法将值转换为字符串?
我的系统是 64 位 windows 10,我在 windows.
编辑
我用 gdb R
(程序名称)开始我的 GDB 会话
节目信息:
然后我 运行 disass main
找到我的输入比较的地址,这就是 strcmp@plt
所在的位置。
我复制地址并使用 b * 0x8001168
设置断点。
我插入断点后,我运行run TestArg
。
现在程序在我的断点处停止了。
我运行info registers
看看里面有没有东西,有。
当我尝试 x/s $rax
时,我得到以下输出。
print
命令确实有效,但我需要字符串值。
I read here that the values that are being compared are stored in rax and rbx.
那个博客 post 似乎是完全错误的—— strcmp()
的参数不可能在 rax
和 rbx
上 x86_64
] -- Linux / x86_64 calling convention 要求 它们位于 rdi
和 rsi
.
查看它们的寄存器值,rax
恰好 包含与 rdi
相同的值,并且 rdx
碰巧 包含与 rsi
.
他们
的事实- 使用
rax
和rdx
而不提及(或明显理解)为什么 - 实际上并没有显示他们所指的反汇编
表示低质量的内容。您可能应该停止阅读此来源,并使用更可靠的东西。