Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 29.01.17 17:09
Оценка: 41 (6)
Всем привет, вот решил еще одну библиотеку выложить....

Инструментарий для редактирования образов исполняемых файлов с возможностью перемещения фрагментов бинарного кода.
------------------------------------------------------------------------------------------------------------------

Библиотека С++/С для редактирования файлов исполняемых образов (DLL,EXE,SYS...) для ОС WINDOWS.
Именуемая далее (не сильно оригинально) IMAGELIB, позволяет программисту создавать специальные программы 
в которые им может быть заложены возможности редактировать чужие исполняемые файлы.

С помощью этой библиотеки, работая с чужими готовыми бинарными образами, программист может:

    - Добавлять в неограниченном объёме свой собственный код в эти образы.
    - Удалять любые выбранные программистом фрагменты кода этих образов.
    - Перемещать любые выбранные программистом фрагменты чужого кода, в нужное ему место, 
      в том числе и в добавленные им с помощью этой библиотеки новые секции кода.
    - Устанавливать хуки на любые функции чужого бинарного кода путем перемещения этих функций в новое место
      с сохранением работоспособности этих функций.
    - Размещать в старом месте таких функции любой свой код.
    - Устанавливать хуки в произвольные точки чужого кода путем "раздвижения" этого кода, 
      для вписывания в него команды перехода.

Библиотека позволяет программисту работать с чужим кодом на уровне макросов исходного кода.

С помощью таких макросов программист может:

    - устанавливать хуки на выбранные им точки чужого кода (как по имени функции так и по ее адресу).
    - вызывать оригинальные перехваченные функции.
    - вызывать любые функции чужого кода.

Библиотека имеет встроенные инструменты для анализа чужого машинного кода.
Библиотека не имеет ограничений на объём и место добавления своего кода к чужим бинарным образам.
Библиотека имеет встроенные средства для работы с так называемыми "Базами Данных Программы PDB",
содержащих отладочную информацию. Микрософт предоставляет такие базы данных для 
всех (почти) исполняемых образов ОС WINDOWS и большинства своих прикладных программ.

Библиотека имеет встроенные средства для Анализа Машинного Кода. 
В результате этого анализа формируются собственная база данных для бинарных образов.
В частности выделяются функции и формируются полные перекрестные ссылки.

На текущий момент библиотека умеет работать как с 32-битными, так и с 64-битными исполняемыми образами.

Анализатор кода поддерживает большинство существующих процессоров, хотя это очевидно и излишний функционал, 
излишность обусловлена работой только с бинарными образами OC WINDOWS. 

Библиотека IMAGELIB использует модифицированную опенсорсную библиотеку CAPSTONE, 
модификация сделана для возможности РЕДАКТИРОВАНИЯ машинных команд.

Библиотека написана за 2 месяца для адаптации одного ну уж очень объёмного сетевого драйвера. 
На текущий момент в ней реализован только необходимый для этой конкретной задачи функционал. 
Я буду только рад если кто-то дополнит ее функционалом под свои нужды. 
Естественно хотелось бы чтобы все это выкладывалось для свободного доступа. :) 

=========

    Документацию буду писать и выкладывать :) Но пока есть только комментарии в коде. 

    Чтобы собрать библиотеку и примеры запустите из "VS2015 x64 Native Tools Command Prompt" коммандный
    файл "build.cmd". В результате библиотека будет собрана, и запущенны тесты. Результаты надо смотреть
    в папке OutBin. В соответствующих конфигурации папках (x64 и Win32) вы найдете файлы "ImageMerge.log"
    и "target.log". 
    Файл  "ImageMerge.log" это лог работы демонстрационной программы, а в "targer.log" результаты работы 
    СОЗДАННОГО нового образа.



сам код тут : https://github.com/Worobow/MakeLib
Не все кто уехал, предал Россию.
Отредактировано 29.01.2017 17:39 Andrew.W Worobow . Предыдущая версия . Еще …
Отредактировано 29.01.2017 17:35 Andrew.W Worobow . Предыдущая версия .
Отредактировано 29.01.2017 17:09 Andrew.W Worobow . Предыдущая версия .
Re: Библиотека для редактирования бинарников.
От: bazis1 Канада  
Дата: 29.01.17 19:24
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Библиотека имеет встроенные средства для Анализа Машинного Кода.

AWW>В результате этого анализа формируются собственная база данных для бинарных образов.
AWW>В частности выделяются функции и формируются полные перекрестные ссылки.

Оооох. Я конечно скептик, но оно реально работает на реальных проектах? Т.е., что будет, если допустим, взять, раскукожить какой-нибудь write.exe, вставить по одному nop-у перед каждой функцией и скукожить обратно? Оно реально запустится? Ведь одна пропущенная ссылка и все — crash. Или под Windows exe всегда содержат relocation records для всех секций?
Re[2]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 29.01.17 19:33
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Оооох. Я конечно скептик, но оно реально работает на реальных проектах? Т.е., что будет, если допустим, взять, раскукожить какой-нибудь write.exe, вставить по одному nop-у перед каждой функцией и скукожить обратно? Оно реально запустится? Ведь одна пропущенная ссылка и все — crash. Или под Windows exe всегда содержат relocation records для всех секций?


Ну да реально работает. И даже в ядре, хотя... в ядре с такими вещами проще.

Нет, одних релоков мало, чтобы двигать (перемещать) функции, там делается анализ кода. Конечно в реальных проектах,надо смотреть, что получается, надо тестировать. Но ведь и образ то в реальных проектах один.
Но так то в целом работает.
Вообще другими словами эту либу можно назвать — exe2obj и потом снова линк.
Два екзешника разбираются на части (exe2obj) и потом из этой кучи псевдо объектников делается (link) результирующий .
==
В ельфах все делать проще, там все документировано, и описано, тут же, в винде, нифига не документировано.
Вообще конечно я сам когда сделал, поражался, что все работает.
Не все кто уехал, предал Россию.
Отредактировано 29.01.2017 19:35 Andrew.W Worobow . Предыдущая версия .
Re[3]: Библиотека для редактирования бинарников.
От: bazis1 Канада  
Дата: 29.01.17 19:58
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>В ельфах все делать проще, там все документировано, и описано, тут же, в винде, нифига не документировано.

AWW>Вообще конечно я сам когда сделал, поражался, что все работает.
Круто. А можно просто для общего развития, несколько примеров реальных тяжелых приложений, которые удалось таким образом перекукожить без потерь?
Re[4]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 29.01.17 20:13
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Круто. А можно просто для общего развития, несколько примеров реальных тяжелых приложений, которые удалось таким образом перекукожить без потерь?


Ну там есть примеры, для тестирования — попробуйте сделать код по сложнее. Возможно что на каком-то коде и не сработает Но она скажет, что "ну не смогла я...".
Примеры? Ну тут я могу только словами что-то такое описать, но думаю, не особо это надо — хотя ну вот 4.3 мега кода драйвера, работают, пока не жаловались. Примеры конкретнее не могу — коммерческие вещи...

Что же касается каких-то диковенных приложений, кстати write.exe по моему к таким тоже относится, возможно что придется ручками доделывать. Просто там много чего кладется в секции данных, спец таблицы, екзешники же не просто только код.
Это же библиотека и пример ImageMerge. Ведь это только пример. Но в той части функционала работы с образами, что мне надо было (4 мега кода драйвера ядра) его хватило. Ну я для этого и делал эту либу.
Не все кто уехал, предал Россию.
Отредактировано 29.01.2017 20:23 Andrew.W Worobow . Предыдущая версия . Еще …
Отредактировано 29.01.2017 20:20 Andrew.W Worobow . Предыдущая версия .
Отредактировано 29.01.2017 20:17 Andrew.W Worobow . Предыдущая версия .
Отредактировано 29.01.2017 20:14 Andrew.W Worobow . Предыдущая версия .
Re: Библиотека для редактирования бинарников.
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.01.17 05:20
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>решил еще одну библиотеку выложить....


Спасибо!

Кстати, никак не могу понять, как на гитхабе отслеживать версии. Или там все завязано исключительно на время последнего коммита?
Re[2]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 30.01.17 06:17
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Кстати, никак не могу понять, как на гитхабе отслеживать версии. Или там все завязано исключительно на время последнего коммита?


Версии лучше вести как релиз в виде ветки с тем чтобы потом можно было делать горячие правки именно в этой зафиксированной версии кода. А потом вытянуть правки в основную ветку.
Не все кто уехал, предал Россию.
Re[3]: Библиотека для редактирования бинарников.
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.01.17 06:34
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Версии лучше вести как релиз в виде ветки с тем чтобы потом можно было делать горячие правки именно в этой зафиксированной версии кода. А потом вытянуть правки в основную ветку.


Это понятно. Я про нумерацию версий для пользователей проекта, чтобы им было понятно, насколько значимые изменения вносились в проект.

Сейчас это работает так, что обновления можно отслеживать только по дате коммита, при этом с ходу не отличить значимых изменений кода от исправления опечатки в документации.
Re[4]: Библиотека для редактирования бинарников.
От: flаt  
Дата: 31.01.17 07:37
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Сейчас это работает так, что обновления можно отслеживать только по дате коммита, при этом с ходу не отличить значимых изменений кода от исправления опечатки в документации.


Там ещё есть теги и релизы, можно отслеживать их по RSS, например.
Re: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 05:48
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Всем привет, вот решил еще одну библиотеку выложить....


Обработка исключений на пересобранном бинарнике проверялась?

P.S. Я вам по секрету скажу, что парсинга RUNTIME_FUNCTION для этого совершенно недостаточно, оттуда растет еще много чего интересного, и явные ссылки в виде релоков там отсутствуют напрочь.

P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?
Отредактировано 01.02.2017 5:52 drVanо . Предыдущая версия .
Re[2]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 06:01
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Оооох. Я конечно скептик, но оно реально работает на реальных проектах? Т.е., что будет, если допустим, взять, раскукожить какой-нибудь write.exe, вставить по одному nop-у перед каждой функцией и скукожить обратно? Оно реально запустится? Ведь одна пропущенная ссылка и все — crash. Или под Windows exe всегда содержат relocation records для всех секций?


В реальных проектах полно мест где нет явных релоков на ссылки (особенно для х64), а если поглядеть на данные от DWARF2 (актуально актуально в том числе и для MinGM), то там в структурах практикуются "адреса" в виде DW_EH_PE_pcrel и DW_EH_PE_datarel, которые зависят от адреса самой структуры.
А есть еще всякие обработки исключений и данные для SWITCH, структура которых полностью зависит от компилятора.
Re[2]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 07:00
Оценка:
Здравствуйте, drVanо, Вы писали:

Сразу скажу очень, хорошо, что вы (и другие) подключились, к проекту, ведь, как я сразу написал, я сделал только то что мне конкретно было надо.

V>Обработка исключений на пересобранном бинарнике проверялась?


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

V>P.S. Я вам по секрету скажу, что парсинга RUNTIME_FUNCTION для этого совершенно недостаточно, оттуда растет еще много чего интересного, и явные ссылки в виде релоков там отсутствуют напрочь.


Парсинг таблиц функций, там делается по сути только для того чтобы их воспроизвести в новом образе и для того чтобы эти функции обнаружить, если нет PDB данных. То есть они частично переезжают в новый как есть, частично ну в том объеме в котором эти функции включатся в новый. Если фрагмент старого кода выбрасывается, то и в таблицу они не перенесутся.

V>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?


Обрабатываются как перекрестная ссылка из данных. Да, кстати, да там есть небольшая проблема, но если она встретится, и в результате ЭМУЛЯЦИИ ВЫПОЛНЕНИЯ КОДА, значения регистра вычислить не удастся то работа будет остановлена. "Ну не смогла я...." Да так бывает. Для таких случаев надо брать и править код и пушить.
Не все кто уехал, предал Россию.
Re[3]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 07:03
Оценка:
Здравствуйте, drVanо, Вы писали:

V>А есть еще всякие обработки исключений и данные для SWITCH, структура которых полностью зависит от компилятора.


Для этого "Там" делается эмуляция выполнения, линейных фрагментов кода, call и условный переход эмуляцию ресетят.
Не все кто уехал, предал Россию.
Re[3]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 07:59
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

V>>P.S. Я вам по секрету скажу, что парсинга RUNTIME_FUNCTION для этого совершенно недостаточно, оттуда растет еще много чего интересного, и явные ссылки в виде релоков там отсутствуют напрочь.


AWW>Парсинг таблиц функций, там делается по сути только для того чтобы их воспроизвести в новом образе и для того чтобы эти функции обнаружить, если нет PDB данных. То есть они частично переезжают в новый как есть, частично ну в том объеме в котором эти функции включатся в новый. Если фрагмент старого кода выбрасывается, то и в таблицу они не перенесутся.


Я вам как раз и пишу, что недостаточно перенести саму RUNTIME_FUNCTION, нужно еще переносить все на что показывает UNWIND_INFO в плане "variable Language-specific handler data (optional)" — это компиляторо зависимая шняга.

V>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?


AWW>Обрабатываются как перекрестная ссылка из данных.


Ну ну
0000000180010574 lea rcx, [0000000180000000]
000000018001057B movsxd rax, r9d
000000018001057E mov eax, [rcx+rax*4+00010BC0]
0000000180010585 xor bl, bl
0000000180010587 mov rbp, r8
000000018001058A add rax, rcx
000000018001058D mov r12, rdx
0000000180010590 jmp rax
...
0000000180010BC0 B6050100    dd 000105B6 Case
0000000180010BC4 C1050100    dd 000105C1 Case
0000000180010BC8 CC050100    dd 000105CC Case
0000000180010BCC A4050100    dd 000105A4 Case
0000000180010BD0 92050100    dd 00010592 Case
0000000180010BD4 AD050100    dd 000105AD Case
0000000180010BD8 9B050100    dd 0001059B Case
Re[4]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 08:08
Оценка:
Здравствуйте, drVanо, Вы писали:

AWW>>Парсинг таблиц функций, там делается по сути только для того чтобы их воспроизвести в новом образе и для того чтобы эти функции обнаружить, если нет PDB данных. То есть они частично переезжают в новый как есть, частично ну в том объеме в котором эти функции включатся в новый. Если фрагмент старого кода выбрасывается, то и в таблицу они не перенесутся.


V>Я вам как раз и пишу, что недостаточно перенести саму RUNTIME_FUNCTION, нужно еще переносить все на что показывает UNWIND_INFO в плане "variable Language-specific handler data (optional)" — это компиляторо зависимая шняга.


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

V>>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?


AWW>>Обрабатываются как перекрестная ссылка из данных.


V>Ну ну


И что?
Не все кто уехал, предал Россию.
Re[5]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 10:18
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

V>>Я вам как раз и пишу, что недостаточно перенести саму RUNTIME_FUNCTION, нужно еще переносить все на что показывает UNWIND_INFO в плане "variable Language-specific handler data (optional)" — это компиляторо зависимая шняга.


AWW>Ну дык, и я вам пишу — берете и делаете ручками, для своей конкретной задачи, для своего образа, для своего отдетектированного компилятора, то что вам надо — берете и пишите и пушите. Я сделал ровно то что надо было мне — в моем конкретном случае. У меня НЕ стояла задача сделать так чтобы работали исключения — у мне они были (должны были) быть запрещены, ибо их использовать нельзя.


Нет, спасибо

V>>>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?


AWW>>>Обрабатываются как перекрестная ссылка из данных.


V>>Ну ну


AWW>И что?


Мдеее... Так понятнее?

0000000180010574 lea rcx, [0000000180000000]
000000018001057B movsxd rax, r9d
000000018001057E mov eax, [rcx+rax*4+00010BC0]
0000000180010585 xor bl, bl
0000000180010587 mov rbp, r8
000000018001058A add rax, rcx
000000018001058D mov r12, rdx
0000000180010590 jmp rax
...
0000000180010592 mov r11, xxx
0000000180010599 jmp 00000001800105D5
...
000000018001059B mov r11, xxx
00000001800105A2 jmp 00000001800105D5
...
00000001800105A4 mov r11, xxx
00000001800105AB jmp 00000001800105D5
...
00000001800105AD mov r11, xxx
00000001800105B4 jmp 00000001800105D5
...
00000001800105B6 mov r11, xxx
00000001800105BD mov bl, 01
00000001800105BF jmp 00000001800105D5
...
00000001800105C1 mov r11, xxx
00000001800105C8 mov bl, 01
00000001800105CA jmp 00000001800105D5
...
00000001800105CC mov r11, ...
00000001800105D3 mov bl, 01
...
0000000180010BC0 dd 000105B6 Case (180000000 + 000105B6 = 1800105B6)
0000000180010BC4 dd 000105C1 Case (180000000 + 000105C1 = 1800105C1)
0000000180010BC8 dd 000105CC Case (180000000 + 000105CC = 1800105CC)
0000000180010BCC dd 000105A4 Case (180000000 + 000105A4 = 1800105A4)
0000000180010BD0 dd 00010592 Case (180000000 + 00010592 = 180010592)
0000000180010BD4 dd 000105AD Case (180000000 + 000105AD = 1800105AD)
0000000180010BD8 dd 0001059B Case (180000000 + 0001059B = 18001059B)


Это был самый "простой" вариант (MSVC), где к смещениям прибавляется ImageBase (без всяких релоков!), а вариант "посложнее" (CLANG):

0000000000007267 lea rdx, [00000000000075B8]
000000000000726E movsxd rcx, dword ptr [rdx+rcx*4]
0000000000007272 add rcx, rdx
0000000000007275 jmp rcx
...
00000000000075B8 dd FFFFFCCD Case (00000000000075B8 + FFFFFCCD = 0000000000007285)
00000000000075BC dd FFFFFCBF Case (00000000000075B8 + FFFFFCBF = 0000000000007277)
00000000000075C0 dd FFFFFCC7 Case (00000000000075B8 + FFFFFCC7 = 000000000000727F)
00000000000075C4 dd FFFFFE46 Case (00000000000075B8 + FFFFFE46 = 00000000000073FE)
00000000000075C8 dd FFFFFE59 Case (00000000000075B8 + FFFFFE59 = 0000000000007411)
00000000000075CC dd FFFFFE4D Case (00000000000075B8 + FFFFFE4D = 0000000000007405)
00000000000075D0 dd FFFFFE54 Case (00000000000075B8 + FFFFFE54 = 000000000000740C)
Отредактировано 01.02.2017 10:28 drVanо . Предыдущая версия .
Re[6]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 10:28
Оценка:
AWW>>Ну дык, и я вам пишу — берете и делаете ручками, для своей конкретной задачи, для своего образа, для своего отдетектированного компилятора, то что вам надо — берете и пишите и пушите. Я сделал ровно то что надо было мне — в моем конкретном случае. У меня НЕ стояла задача сделать так чтобы работали исключения — у мне они были (должны были) быть запрещены, ибо их использовать нельзя.

V>Нет, спасибо


Тогда вообще не понятно о чем мы говорим.
Что вы хотите сказать?

Ну на всякий случай более понятно напишу — если бы мне было это надо то я бы это сделал. Мне это было не надо. Вам это надо? Если да, то делайте, если не надо, то используйте как есть.

V>>>>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?

AWW>>>>Обрабатываются как перекрестная ссылка из данных.
V>>>Ну ну
AWW>>И что?

V>Мдеее... Так понятнее?


Да с чего вы взяли, что мне вообще было что-то не понятно?
Я вас спросил — и что с того?
Не все кто уехал, предал Россию.
Re[7]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 10:31
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>>>Ну дык, и я вам пишу — берете и делаете ручками, для своей конкретной задачи, для своего образа, для своего отдетектированного компилятора, то что вам надо — берете и пишите и пушите. Я сделал ровно то что надо было мне — в моем конкретном случае. У меня НЕ стояла задача сделать так чтобы работали исключения — у мне они были (должны были) быть запрещены, ибо их использовать нельзя.


V>>Нет, спасибо


AWW>Тогда вообще не понятно о чем мы говорим.

AWW>Что вы хотите сказать?

Я ничего не хочу сказать, я просто спрашивал как это у вас сделано. Ну видимо никак не сделано, поэтому вопрос закрыт.

AWW>>>>>Обрабатываются как перекрестная ссылка из данных.

V>>>>Ну ну
AWW>>>И что?

V>>Мдеее... Так понятнее?


AWW>Да с чего вы взяли, что мне вообще было что-то не понятно?

AWW>Я вас спросил — и что с того?

Как вы находите такие перекрестные ссылки и потом перестраиваете эти таблицы?
Re[4]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 10:36
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Здравствуйте, drVanо, Вы писали:


V>>А есть еще всякие обработки исключений и данные для SWITCH, структура которых полностью зависит от компилятора.


AWW>Для этого "Там" делается эмуляция выполнения, линейных фрагментов кода, call и условный переход эмуляцию ресетят.


Эмуляция выполнения? Зачем она там нужна? Если только ядл обнаружения безусловных переходов, то это реализуется обычным дизассемблером, а не эмулятором.
Re[8]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 10:38
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Я ничего не хочу сказать, я просто спрашивал как это у вас сделано. Ну видимо никак не сделано, поэтому вопрос закрыт.


Я уже по-моему третий раз пишу — передо мной данная задача не стояла, так как исключения (по правилам) ЗАПРЕЩЕНЫ. Это ядро.

AWW>>Да с чего вы взяли, что мне вообще было что-то не понятно?

AWW>>Я вас спросил — и что с того?

V>Как вы находите такие перекрестные ссылки и потом перестраиваете эти таблицы?


Быстрый (работать надо) ответ — никак. Не надо перемещать те функции которые невозможно переместить. Вы же пишите _сами_ программу, которая используя эту библиотеку, что-то такое делает. Библиотека дает вам набор возможностей.

Длинный ответ — делается легко. В библиотеку есть так называемые виртуальные релоки они могут быть RVA и VA. Вот берете и делаете ручками. Если хотите автоматизировать то сделать это не трудно, а вот как именно — это долго рассказывать.
Не все кто уехал, предал Россию.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.