大家有没有办法可以直接从内联汇编程序访问结构成员的指针我试过这个
procedure test(eu:PImageDosHeader);assembler;
asm
push eu._lfanew
end;
它不会编译但是如果我使用这个
procedure test(eu:Pointer);
var
xx:TImageDosHeader;
begin
xx:=TImageDosHeader(eu^);
asm
push xx._lfanew
end;
end;
它工作得很好。任何想法如何通过内联asm中的指针访问结构?是优化代码的问题
答案 0 :(得分:12)
另一种解决方法:
procedure test(eu:PImageDosHeader);
asm
push eu.TImageDosHeader._lfanew
end;
答案 1 :(得分:4)
以下作品:
type
PMyStruct = ^TMyStruct;
TMyStruct = record
A, B: cardinal;
end;
procedure ShowCard(Card: cardinal);
begin
ShowMessage(IntToHex(Card, 8));
end;
procedure test(Struct: PMyStruct);
asm
push ebx // We must not alter ebx
mov ebx, eax // eax is Struct; save in ebx
mov eax, TMyStruct(ebx).A
call ShowCard
mov eax, TMyStruct(ebx).B
call ShowCard
pop ebx // Restore ebx
end;
procedure TForm6.FormCreate(Sender: TObject);
var
MyStruct: TMyStruct;
begin
MyStruct.A := $22222222;
MyStruct.B := $44444444;
test(@MyStruct);
end;
答案 2 :(得分:2)
我会这样写:
procedure test(const eu: TImageDosHeader);
asm
push TImageDosHeader([EAX])._lfanew
end;
相关文档为here。