Извлечение одной процедуры из объектного файла?

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

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

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам