Может ли кто-нибудь помочь мне перенести эту функцию C ++ в Delphi?
sys
- это класс с именем TSystem
.
SharedMem
- это класс с именем TVirtualMemory
.
int Process::FixApi(dword FileHandler,image_import_descriptor* Imports,dword dllbase){
image_import_by_name** names;
dword* pointers;
if (Imports->original_first_thunk!=0){
names=(image_import_by_name**)Imports->original_first_thunk;
}else{
names=(image_import_by_name**)Imports->first_thunk;
};
names=(image_import_by_name**)((dword)names+FileHandler);
pointers=(dword*)(Imports->first_thunk + FileHandler);
if (Imports->first_thunk==0)return 0;
for (int i=0;i<200;i++){
if (names[i]==0)break;
if(!((dword)(names[i]->name+FileHandler) & 0x80000000)){
dword s=(dword)names[i]->name;
dword ptr=sys->GetAPI((char*)(s+FileHandler),dllbase);
dword n=this->SharedMem->get_virtual_pointer(ptr);
if (n!=0){
ptr=n;
}
memcpy(&pointers[i],&ptr,4);
}
};
};
спасибо
Это моя попытка преобразовать вышеуказанный код:
function FixApi(FileHandler: dword;
Imports: Pimage_import_descriptor; dllbase: dword): Integer;
var
names:^image_import_by_name;
pointers:Pdword;
i:integer;
s,ptr,n:dword;
begin
if Imports^.original_first_thunk<>0 then
names:=Pointer(Imports^.original_first_thunk)
else
names:=Pointer(Imports^.first_thunk);
names:=Pointer(dword(names)+FileHandler);
pointers:=Pdword(Imports^.first_thunk+FileHandler);
if (Imports^.first_thunk=0)then result:=0;
for i:=0 to 200 do
begin
{
// i didn't get it
if (names[i]==0)break;
if(!((dword)(names[i]->name+FileHandler) & 0x80000000)){
dword s=(dword)names[i]->name;
}
ptr:=sys.GetAPI(PChar(s+FileHandler),dllbase);
n:=SharedMem.get_virtual_pointer(ptr);
if n<>0 then
ptr:=n;
CopyMemory(@pointers[i],@ptr,4);
end;
end;