Извлечение одной процедуры из объектного файла? - PullRequest
0 голосов
/ 25 января 2012

У меня есть 64-битный объектный файл COFF (без исходного кода или отладочной информации), из которого мне нужно извлечь одну процедуру.

Процедура относительно короткая, и ее только зависимости:

  1. Одна глобальная переменная.
  2. Пара импортированных процедур.

Я уже пытался разобрать ипересборка кода;однако по какой-то странной причине, хотя код выглядит одинаково в отладчике и дизассемблере, он не ведет себя одинаково.(Я уже пытался убедиться, что исполняемые разделы имеют правильные флаги и т. Д., Но, насколько мне известно, все они верны, и значения также соответствуют тому, что они «должны» быть во время выполнения.)

Так есть ли способ напрямую скопировать функцию в новый объектный файл (или удалить все кроме этой функции), без Вам нужно разобрать и собрать код в процессе?

1 Ответ

1 голос
/ 25 января 2012

Я не уверен, есть простой способ в общем случае.

Например, несколько процедур могут ссылаться на один общий фрагмент кода (т. Е. Статическую функцию).Таким образом, вам нужно построить граф вызовов для всех блоков кода в файле и взять блоки кода, на которые ссылается ваша процедура.Чем нужно исправлять адреса во всех переходах и вызовах, так как будет новая раскладка кода.

...