Код (Text): mov ebx,3ch mov eax,offset WS call read ;в буфе адрес начала пе mov eax,offset WS mov ebx,buf add ebx, 78h call read ;в буфе адресс экспортной таблы mov eax,offset WS mov ebx,buf add ebx, 18h call read ;в буфе имя библы процедура реад принимает два параметра, имя в еах и смещение в ебх, пишет в двордный буф, но почемуто после последнего калл, в буфе не адресс имени библы, хотя вроде всё так как надо.
Код (Text): push 0h push 80h push 3h push 0h push 1h push 80000000h push eax call CreateFile mov hf, eax push 0 push 0 push ebx push eax call SetFilePointer push 0 push offset sh push offset 4 push offset buf push hf call ReadFile ret А зачем он тебе не подскажешь?
Ну это я ваще искал Num of Name Pointers, но для примера лучше искать имя библы 0ch. Ну в принцепе я знаю, но и как быть дальше, я думал что смещение относительно аймедж база, будет указывать в мамяти тудаже куда, и смещение относительна 0 в файличке, или я не прав?
Необязательно. Можно выделить память размером SizeOfImage и скопировать туда содержимое секций используя поле VirtualSize секции (остаток - VirtualSize-SizeOfRawData - заполняем нулями). Т.е. сформировать в памяти образ программы в том виде, в каком он будет после загрузки лоадером. Потом можно читать данные, используя RVA как смещение от начала массива.