поиск инструкции asm в скомпилированной программе на C - PullRequest
1 голос
/ 10 марта 2012

У меня очень простая программа на 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

Как мне найти, например, адрес каждой push инструкции из другой программы на C? Можно ли это сделать таким образом?:

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++;
   ...
}

1 Ответ

3 голосов
/ 11 марта 2012

Как уже указал Оли Чарльзуорт, инструкции имеют разную длину в архитектуре x86.Вы по-прежнему можете написать программу, которая сделает это за вас, но вам нужно будет проанализировать все инструкции, чтобы правильно определить их длину и место начала следующей.

Я не понимаю, почему вы хотитенаписать свою собственную программу для решения проблемы, или вы что-то нам не говорите?Вы ищете только способ найти адреса push инструкций?Если так, просто сделайте это:

objdump -d another_c_program | grep push

Конечно, это также найдет pushl и так далее.Я думаю, вы тоже хотите их, иначе команда может быть изменена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...