一个十分低级的问题

SGFXJ1974 2007-06-16 03:54:58
我在把程序中注入到另一个程序进程中
要调用这个进程中的一段函数

PUSH ESI
PUSH 3
CALL elementc.006DB4A0
MOV ESI,EAX
TEST ESI,ESI
JE SHORT elementc.0059E267
MOV AL,BYTE PTR SS:[ESP+8]
MOV WORD PTR DS:[ESI],3
MOV BYTE PTR DS:[ESI+2],AL
MOV ECX,DWORD PTR DS:[8F3CC4]
PUSH 3
PUSH ESI
MOV ECX,DWORD PTR DS:[ECX+20]
CALL elementc.0057AD80
PUSH ESI
CALL elementc.006DB4B0
ADD ESP,4
POP ESI
RETN

CALL elementc.006DB4B0 中的 elementc.006DB4B0
如何改写
...全文
191 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2007-06-16
  • 打赏
  • 举报
回复
可以将 call 指令的下一条指令 ADD esp, 4 的地址压栈, 再将 006DB4B0h 立即数压栈, 然后 RETN
zara 2007-06-16
  • 打赏
  • 举报
回复
如果自己的代码比较少的话, 就象上面帖子里的, 也可以直接编码的. 即手工计算偏移量, 直接填入指令. Call elementc.006DB4B0 指令的机器码是 E8 xx xx xx xx, 其中的 xx xx xx xx 就是目标地址和返回地址间的差. 比如 Call elementc.006DB4B0 指令的地址是 00401010h, 那么返回地址就是 00401015h, 因为 Call 指令自身要占用 5 个字节. 那么偏移量就是 006DB4B0h-00401015h=002DA49Bh. 最后, Call 指令的机器码完整地就是 E8 9B A4 DA 2D 00

如果是采用帖子里的方法的话, 就是:
push 00401015h ; 68 15 10 40 00
push 006DB4B0h ; 68 B0 B4 6D 00
ret
SGFXJ1974 2007-06-16
  • 打赏
  • 举报
回复
能不能 详细一些
谢谢

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧