簡體   English   中英

在編譯的C程序中查找asm指令

[英]finding asm instruction in compiled C program

我有非常簡單的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等。 我猜你也想要它們,否則可以修改命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM