распечатать код функции в DLL - PullRequest
2 голосов
/ 15 апреля 2011

Я хочу напечатать код функции в DLL.

Я загрузил dll, у меня есть название нужной функции, что дальше?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 15 апреля 2011

Реально, следующий - получение кода. В библиотеке DLL есть объект код - двоичный код в форме, готовый к выполнению процессором, не готовый к печати. ​​

Вы можете разобрать, что находится в DLL. Если вам удобно работать с ассемблером, это может быть полезно, но это определенно , а не оригинальный исходный код (или, возможно, что-нибудь очень близкое к нему). Если вы хотите разобрать его, загрузка его в вашу программу (обычно) не очень хорошая отправная точка. Попробуйте открыть командную строку VS и использовать dumpbin /disasm yourfile.dll. Будьте готовы к выводу lot , если только рассматриваемая DLL не является действительно крошечной.

1 голос
/ 15 апреля 2011

Ваша единственная возможность получить подсказки о фактически реализованной функциональности указанной функции внутри DLL - это провести обратный инжиниринг, каким бы ни было двоичное представление сборки.Это означает, что вам в значительной степени нужно использовать дизассемблер (IDA Pro или отладчик, например, OllyDbg), чтобы преобразовать коды операций в фактическую мнемонику сборки, а затем просто пройтись по ней и попытаться понять детали ее работы.

Обратите внимание, что поскольку он скомпилирован из C / C ++, в процессе теряется много и много данных из-за оптимизации и характера процесса;результирующая сборка может (и, вероятно, будет) казаться загадочной и бессмысленной, но она все равно выполняет свою работу точно так же, как программист программировал ее на языке более высокого уровня.Это не будет легко.Это займет время.Вам понадобятся удача и нервы.Но это выполнимо.:)

0 голосов
/ 15 апреля 2011

Проверьте эту http://www.cprogramming.com/challenges/solutions/self_print.html и эту программу, которая печатает свой собственный код? и эту http://en.wikipedia.org/wiki/Quine_%28computing%29

Я не уверен, что она будет делать то, что вы хотитено я думаю, это может вам помочь.

0 голосов
/ 15 апреля 2011

Ничего. DLL - это скомпилированный двоичный код; Вы не можете получить источник, просто скачав его и зная название функции.

Если бы это была сборка .NET, вы могли бы получить источник, используя отражение. Однако вы упомянули C ++, так что это сомнительно.

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