求教delphi如何写汇编到*.exe文件?
本帖最后由 冥界3大法王 于 2022-1-13 17:03 编辑假如,我要把 汇编指令JMP xxxxXXXXFOA这个文件偏移【假设是52A】写入到*.exe
该如何去实现呢?
网上找到了这类的
https://www.cnblogs.com/onroad/archive/2009/07/13/1522705.html嵌入汇编代码
http://blog.sina.com.cn/s/blog_722bc92e0100q8x3.html 2进制写入
不明白,如何合在一起?
这是从以前写的修改指定程序内存数据的代码里摘的,你看是不是你要的
var
Base:Pointer;
GameH:HWND;
GamePid:DWORD;
mNum: LONG64;
val:integer;
wds:NativeUInt;
begin
GameH := FindWindow('xxx','xxx');
if GameH <=0 then Exit;
GetWindowThreadProcessId(GameH ,@GamePid);
pHandle:= OpenProcess(PROCESS_ALL_ACCESS,false,GamePid);
Base:=GetModuleBaseAddress(GamePid,'xxx.exe'); //取基址
if ReadProcessMemory(pHandle, Pointer(long64(Base) +$xxx), @mNum, 8,lBuf) then begin//偏移
nAddr:=Pointer(long64(mNum) + $xxx);//偏移
val:=xxx;
WriteProcessMemory(pHandle, nAddr, Pointer(@val), 8, wds); //写
end;
end jmp这种比较麻烦,你需要先计算写入文件位置对应指令的内存加载地址,然后根据写入位置的指令地址和跳转目标地址计算jmp的机器码数值,然后再写入 就是汇编代码按格式嵌入delphi代码中,然后在delphi的编译器中编译,当然你可以要了解一下汇编的代码是怎么写?什么叫汇编语言
@null119 这种是动态写入到内存? 不是文件吧?
@苏紫方璇 懂了,几年前您说过: 要跳往的地址-当前的地址= 得到偏移长度(2个16进制数的减法) 感觉现在都不是delphi的时代了,你怎么还在研究delphi呢?想将delphi发扬光大 冥界3大法王 发表于 2022-1-13 17:17
@null119 这种是动态写入到内存? 不是文件吧?
@苏紫方璇 懂了,几年前您说过: 要跳往的地址-当前的地 ...
32位一般是目标地址-指令地址-5(jmp指令长度) kenxy 发表于 2022-1-13 17:19
感觉现在都不是delphi的时代了,你怎么还在研究delphi呢?想将delphi发扬光大
@kenxy
照你这么说人家公司该破产了?这种工具开发的软件多如牛毛。从共享软件,到病毒木马黑客程序。
我又不参加工作去,再说了用工具得找自己喜欢的称手的工具用,你给我易语言也用不习惯啊。
国外的论坛,台湾,QQ群用的人还大有人在呢。难道人家脑袋都有水?再说工具皆在人用。
过时了,并不意味着人家的工具真的不给力,关键皆在于用精用熟啊~~ kenxy 发表于 2022-1-13 17:19
感觉现在都不是delphi的时代了,你怎么还在研究delphi呢?想将delphi发扬光大
时代在变化,但是Delphi也在变化,只是它不像以前那么深入校园,所以面比以前窄,但是你如果去了解它你才能明白它,我一直用,但不是唯一的开发工具,除非Delphi解决不了或者不好解决的应用 冥界3大法王 发表于 2022-1-13 17:17
@null119 这种是动态写入到内存? 不是文件吧?
@苏紫方璇 懂了,几年前您说过: 要跳往的地址-当前的地 ...
64位也是目标地址 - 指令地址 - 5,所以64位能跳转到的内存距离是有限的,需要借一个跳板来远跳
页:
[1]
2