如何在gdb中调用程序集?

gdb*_*gdb 6 assembly gdb

在gdb中我可以call用来运行函数,但是如果我想运行一些额外的程序集呢?

pax*_*blo 5

在GCC 5 (1)之前,我不知道运行任意机器代码的方法,除非您实际将机器代码输入内存然后运行它.

如果你想运行已经在内存中的代码,你可以将指令指针设置为start,最后是断点,然后去.然后,在断点之后,将指令指针更改回其原始值.

但实际上我无法看到这个用例.这并不意味着没有一个,只要通过运行代码可以做任何事情,你也可以通过直接修改寄存器,标志,内存等来实现.

例如,命令:

info registers
Run Code Online (Sandbox Code Playgroud)

将转储寄存器的当前值,同时:

set $eax = 42
Run Code Online (Sandbox Code Playgroud)

eax寄存器更改为42.

您也可以这样改变内存:

set *((char*)0xb7ffeca0) = 4
Run Code Online (Sandbox Code Playgroud)

这会将单个字节写入内存位置0xb7ffeca0,您也可以使用相同的方法来存储更广泛的数据类型.


(1) GCC 5允许编译和与执行任意代码compile code命令,如记录在这里.