HeMet
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору deks Полу-академический интерес. Цель библиотека Detours. Так же по роду хобби приходится периодически заниматься обратной разработкой форматов файлов для различных игр и, соответственно, писать утилиты для работы с ними (разумеется, продукция некоммерческая и всё ради самообразования , и не хочется к небольшой утилите добавлять внешние зависимости, особенно если утилита позиционируется, как универсальная. P.S. С зависимостями от new/delete разобрался, достаточно откомпилить в объектник такой вот код: Код: extern "C" void* new_impl(size_t n); extern "C" void delete_impl(void* p); void operator delete(void* p) { delete_impl(p); } void* operator new (size_t n) { return new_impl(n); } | А потом в программе сделать перенаправление: Код: {$L DetoursObjs\detours.obj} {$L DetoursObjs\creatwth.obj} {$L DetoursObjs\disasm.obj} {$L DetoursObjs\image.obj} {$L DetoursObjs\modules.obj} {$L DetoursObjs\new_op.obj} ... // сишный new function _new_impl(n: SIZE_T): Pointer; cdecl; external 'msvcrt.dll' name '??2@YAPAXI@Z'; //begin // try // Result := GetMemory(n); // except // on EOutOfMemory do // Result := nil; // end; //end; // сишный delete procedure _delete_impl(p: Pointer); cdecl; external 'msvcrt.dll' name '??3@YAXPAX@Z'; //begin // FreeMemory(p); //end; var pi: PInteger; begin try { TODO -oUser -cConsole Main : Insert code here } pi := _new_impl(SizeOf(Integer)); pi^ := 7; Writeln(pi^); _delete_impl(pi); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; | Вдруг кому пригодиться. P.S.S. И вообще так интересней изучать языки, если есть некоторая тяга в сторону железа | Всего записей: 212 | Зарегистр. 05-09-2007 | Отправлено: 18:25 14-01-2013 | Исправлено: HeMet, 18:34 14-01-2013 |
|