Разборка функции памяти в Windows на C / C ++ - PullRequest
2 голосов
/ 19 августа 2011

Я использую MSVC 2008.

Допустим, в моем коде есть функция:

int foo()
{
  return 2 + 5;
}

Какие инструменты я могу использовать для получения представления ASCII этой процедуры в ассемблере X86?

void bar()
{
  std::string s = disassemble(foo);
  printf("%s\n", s.c_str());
}

Ответы [ 3 ]

2 голосов
/ 19 августа 2011

Вы можете использовать чудесную библиотеку BEAEngine .

2 голосов
/ 19 августа 2011

Вы можете вывести код сборки, щелкнув Project-> properties-> C ++ -> Вывод сборки и затем выбрав предпочтение, файл сборки будет создан при следующей сборке.

Вы также можете просмотретькод сборки во время отладки (в точке останова) нажатием ctrl + Alt + D.

Это, очевидно, предполагает, что вы находитесь на компьютере x86 для получения сборки x86.

0 голосов
/ 19 августа 2011

Убедитесь, что файл является частью проекта.Перейдите в Свойства проекта -> Свойства конфигурации -> C / C ++ -> Выходные файлы, а затем в разделе «Вывод ассемблера» выберите что-то другое, чем «нет списка».Затем при компиляции вы получите файл .asm, если вы указали только сборку, или файл .lst, если вы указали файл листинга.Независимо от того, что вы выбрали, вы будете хранить сгенерированный код сборки из вашего файла (хотя, как предупреждение, код для написанных вами деталей часто будет почти похоронен под кучей других ошибок из стандартных библиотек и т.

...