我有一个非常简单的 C 程序:
int foobar(int a)
{
int b = a;
}
int main(int argc, char *argv[])
{
foobar(0xDEAD);
return 0;
}
使用 objdump -d main.out
我得到了带有大量汇编指令的反汇编二进制文件:
4004a3: 55 push %ebp
4004a4: 48 89 e5 mov %esp,%ebp
4004a7: 48 83 ec 10 sub $0x10,%esp
我如何从另一个 C 程序中找到每个 push
指令的地址?
可以这样做吗?:
position = 0;
while (...)
{
...
int act_value;
read(binary_file, &act_value, 4);
if (act_value == /*what value?*/)
{
printf("Instruction: push\n");
printf("Address: %X\n", position * 4); /* is this correct?*/
}
position++;
...
}
最佳答案
正如 Oli Charlesworth 已经指出的那样,x86 架构上的指令长度可变。您仍然可以编写一个程序来为您执行此操作,但您需要解析所有指令以正确了解它们有多长以及下一条指令从哪里开始。
我不明白您为什么要编写自己的程序来解决问题,或者您有什么事情没有告诉我们?您是否只是在寻找一种方法来查找 push
指令的地址?如果是这样,就这样做:
objdump -d another_c_program | grep push
当然这个也会找pushl
之类的。我猜你也想要它们,否则可以修改命令。
关于c - 在已编译的 C 程序中查找 asm 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9649473/