吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1463|回复: 4
收起左侧

[求助] 不支持64位内嵌汇编,老外的文档看不太懂

[复制链接]
冥界3大法王 发表于 2021-4-10 17:05
[Delphi] 纯文本查看 复制代码
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/R ... nline_Assembly_code

问题是怎么修改呢?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

CRoot 发表于 2021-4-10 18:01
本帖最后由 CRoot 于 2021-4-10 18:06 编辑

就是说 不支持内联64位混合汇编。 要么函数里面只有Pascal 要么函数里面只有汇编语句,不能写了Pascal的变量生成,然后又写汇编代码。

比如
[Delphi] 纯文本查看 复制代码
  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
      in  al,dx
      mov @Result,al
    end;
  end;
  {$ELSE}
  // CPU64, x64
  asm
    mov dx,Address
    in  al,dx
    mov @Result,al
  end;
  {$ENDIF CPUX86}


你可以把汇编部分单独拆成 函数 ,然后再调用。
 楼主| 冥界3大法王 发表于 2021-4-10 18:05
@CRoot
是不是就是这页面中说的注入线程
https://stackoverflow.com/questi ... orted-language-feat
或QQ群说的封装成activeX来实现?
那别人来破解是不是也得x32dbg+x64dbg同时上阵了?
CRoot 发表于 2021-4-10 18:14
冥界3大法王 发表于 2021-4-10 18:05
@CRoot
是不是就是这页面中说的注入线程
https://stackoverflow.com/questi ... orted-language-feat

不好意思,可能不是太明白您的意思。上述 似乎出错的原因似乎是用X64的编译器编译的32位的汇编出的问题。针对进程注入的话,肯定是32位的注入到32位里面,64位注入到64位里面。而您出现的问题似乎是在x64编译器下,汇编和Pascal混写了,您可以将asm代码单独拆到一个函数里面,就是这个函数里面只有asm,没有
[Delphi] 纯文本查看 复制代码
result := inttohex(a, 8) + '-' + inttohex(b, 8) + '-' + inttohex(c, 8) + '-' + inttohex(d, 8);

这类语句。而32位汇编,就可以混合写,您也可以将编译的目标改为编译成32位的程序,而不是64位的程序。由于我这边没有Delphi环境,所以没法写一下改好的内容。
CRoot 发表于 2021-4-10 18:17
本帖最后由 CRoot 于 2021-4-10 18:29 编辑

将目标改为32位的方法 https://bbs.csdn.net/topics/391848041

这问题在VS也有,就是32位的还能用内联汇编,64位的必须保存成.asm文件,写成函数然后添加到项目工程中编译,也蛮麻烦的64位的。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 04:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表