добрый день, возникла проблема следующего характера: дали задание написать патч для делфовской программы который должен подменять одну фукцию другой, в который будет происходить динамическое подключение библиотеки через LoadLibraryA. Соль в том что при замене исходной функции на свою мне надо сделать следующее 68 XXXXXXXX || push имя dll в стек E8 XXXXXXXX || call LoadLibraryA проблема в том что в call надо указать (не бейте сильно если пишу что не так) смещение между адресом по которому выполняется call и строчкой которая находиться в верху секции CODE вида FF 25 XXXXXXXX где вместо иксов адрес указывающий на строчку в секции импорта с именем нужной функции. Проблема в том что адрес если открыть файл в с# или delphi как массив байт(и брать адрес как номер байта в массиве + базовый адрес) или в том же просмотрщике в тотале отличается от адреса которые показывают ollydbg или hview. Допустим разница, если смотреть строчку из из секции CODE через ollydbg и если открывать через c# как массив байт и добавлять к нему базовый адрес (который = 0x400000) равна 0xC00. Подскажите как узнать данное смещение,т.к. PE заголовок мне ответа не дал или я его не увидел. Заранее спасибо.
оля и хью показывают верный, так как при загрузке файла в память секции встают на свои места и только в этот момент надо смотреть смещение.
гм... спасибо, а программно как его посмотреть из с# или delphi например не подскажите ? или линк мб где это описано.
посмотрите статьи на сайте по формату PE. там будет набор необходимых вам функций http://wasm.ru/series.php?sid=4
спасибо, читал уже. не помогло... пытался через CreateFileMapping и MapViewOfFile. получил с них данные. считал поток байт - но то же самое. адреса не те
ts_trinity Допустим разница, если смотреть строчку из из секции CODE через ollydbg и если открывать через c# как массив байт и добавлять к нему базовый адрес (который = 0x400000) равна 0xC00. Вам не имедж байс надо прибавлять а Virtual Address секции ..