不支持64位内嵌汇编,老外的文档看不太懂
function TForm1.GetSerialMotherBoard: string; //获取主板ID
var
a, b, c, d: LongWord;
begin
asm
push EAX
push EBX
push ECX
push EDX
mov eax, 1
db $0F, $A2
mov a, EAX
mov b, EBX
mov c, ECX
mov d, EDX
pop EDX
pop ECX
pop EBX
pop EAX
end;
result := inttohex(a, 8) + '-' + inttohex(b, 8) + '-' + inttohex(c, 8) + '-' + inttohex(d, 8);
end;
出现报错信息
E1025 Unsupported language feature: 'ASM' delphi
百度那饭桶又没找到;Google搜索找到以下官方解释:http://docwiki.embarcadero.com/RADStudio/XE2/en/Converting_32-bit_Delphi_Applications_to_64-bit_Windows#Inline_Assembly_code
问题是怎么修改呢?
本帖最后由 CRoot 于 2021-4-10 18:06 编辑
就是说 不支持内联64位混合汇编。 要么函数里面只有Pascal 要么函数里面只有汇编语句,不能写了Pascal的变量生成,然后又写汇编代码。
比如
function PortIn(Address: Word): Byte;
{-Use this instead of Port since it works in both 16 and 32-bit mode}
{$IFDEF CPUX86}
begin
asm
mov dx,Address
inal,dx
mov @Result,al
end;
end;
{$ELSE}
// CPU64, x64
asm
mov dx,Address
inal,dx
mov @Result,al
end;
{$ENDIF CPUX86}
你可以把汇编部分单独拆成 函数 ,然后再调用。 @CRoot
是不是就是这页面中说的注入线程
https://stackoverflow.com/questi ... orted-language-feat
或QQ群说的封装成activeX来实现?
那别人来破解是不是也得x32dbg+x64dbg同时上阵了? 冥界3大法王 发表于 2021-4-10 18:05
@CRoot
是不是就是这页面中说的注入线程
https://stackoverflow.com/questi ... orted-language-feat
不好意思,可能不是太明白您的意思。上述 似乎出错的原因似乎是用X64的编译器编译的32位的汇编出的问题。针对进程注入的话,肯定是32位的注入到32位里面,64位注入到64位里面。而您出现的问题似乎是在x64编译器下,汇编和Pascal混写了,您可以将asm代码单独拆到一个函数里面,就是这个函数里面只有asm,没有
result := inttohex(a, 8) + '-' + inttohex(b, 8) + '-' + inttohex(c, 8) + '-' + inttohex(d, 8);
这类语句。而32位汇编,就可以混合写,您也可以将编译的目标改为编译成32位的程序,而不是64位的程序。由于我这边没有Delphi环境,所以没法写一下改好的内容。 本帖最后由 CRoot 于 2021-4-10 18:29 编辑
将目标改为32位的方法 https://bbs.csdn.net/topics/391848041
这问题在VS也有,就是32位的还能用内联汇编,64位的必须保存成.asm文件,写成函数然后添加到项目工程中编译,也蛮麻烦的64位的。
页:
[1]