跳转到下一个“指令”使用 gdb

发布于 2024-12-08 23:47:23 字数 1015 浏览 0 评论 0原文

我正在尝试找出金丝雀值设置和检查机制。

#include 
int main(void)
{
        return printf("Hi!\n");
}

反汇编主程序时,我

(gdb) disas main
0x080483f4 :    lea    0x4(%esp),%ecx
0x080483f8 :    and    $0xfffffff0,%esp
0x080483fb :    pushl  -0x4(%ecx)
0x080483fe :   push   %ebp
0x080483ff :   mov    %esp,%ebp
0x08048401 :   push   %ecx
0x08048402 :   sub    $0x14,%esp
0x08048405 :   mov    %gs:0x14,%eax
0x0804840b :   mov    %eax,-0x8(%ebp)
0x0804840e :   xor    %eax,%eax
0x08048410 :   movl   $0x8048500,(%esp)
0x08048417 :   call   0x8048320 
0x0804841c :   mov    -0x8(%ebp),%edx
0x0804841f :   xor    %gs:0x14,%edx
0x08048426 :   je     0x804842d 
0x08048428 :   call   0x8048330 
0x0804842d :   add    $0x14,%esp
0x08048430 :   pop    %ecx
0x08048431 :   pop    %ebp
0x08048432 :   lea    -0x4(%ecx),%esp
0x08048435 :   ret

在 0x0804840e 处设置了一个断点,使用

b *0x0804840e

“程序流程在此断点停止后,我希望 gdb 转到下一个指令”而不是下一个<一行c 代码。我认为我不能为此使用 next 。那么除了在每条指令上设置断点之外,我还有什么其他选择呢?

I am attempting to figure the canary value setting and checking mechanism.

#include 
int main(void)
{
        return printf("Hi!\n");
}

When disassemble the main, I get

(gdb) disas main
0x080483f4 :    lea    0x4(%esp),%ecx
0x080483f8 :    and    $0xfffffff0,%esp
0x080483fb :    pushl  -0x4(%ecx)
0x080483fe :   push   %ebp
0x080483ff :   mov    %esp,%ebp
0x08048401 :   push   %ecx
0x08048402 :   sub    $0x14,%esp
0x08048405 :   mov    %gs:0x14,%eax
0x0804840b :   mov    %eax,-0x8(%ebp)
0x0804840e :   xor    %eax,%eax
0x08048410 :   movl   $0x8048500,(%esp)
0x08048417 :   call   0x8048320 
0x0804841c :   mov    -0x8(%ebp),%edx
0x0804841f :   xor    %gs:0x14,%edx
0x08048426 :   je     0x804842d 
0x08048428 :   call   0x8048330 
0x0804842d :   add    $0x14,%esp
0x08048430 :   pop    %ecx
0x08048431 :   pop    %ebp
0x08048432 :   lea    -0x4(%ecx),%esp
0x08048435 :   ret

I set a breakpoint at 0x0804840e using

b *0x0804840e

After the program flow stops at this breakpoint I would like gdb to go to the next instruction instead of next line of c code. I don't think I can use next for this. So what other option do I have apart from setting a breakpoint at every instruction?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

这样的小城市 2024-12-15 23:47:23

您想使用 stepi,又名 si。它按照一条机器指令进行操作。
(或者使用 ni 跳过 call 指令。)

查看 GDB 手册中有关继续和单步执行的部分,其中有 它的条目
或者在GDB中,help / help running会告诉你si存在,help stepi会告诉你更多关于它。

You want to use stepi, aka si. it steps by one machine instruction.
(Or ni to step over call instructions.)

Check the GDB manual's section on continuing and stepping, which has an entry for it.
Or inside GDB, help / help running will show you that si exists, and help stepi will show you more about it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文