红警DIY论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 西城杨柳

关于Ares的几个问题

[复制链接]
发表于 2020-3-3 19:36:01 | 显示全部楼层
西城杨柳 发表于 2020-3-3 18:46
我用的w64。

这不是YR本身的问题,是Ares的问题。Ares的代码里有直接在内联ASM里jmp到外部的,这明显依 ...

GCC 允许在函数外面直接写汇编(相当于 VC 的 __declspec(naked) 里套汇编),写个 wrapper function 就行了,没啥难度。

  1. extern int __fastcall add(int x, int y);

  2. __asm__(
  3.   "_add: \n"
  4.   "  lea eax, [ecx + rdx] \n"
  5.   "  ret\n"
  6. );

  7. int call_add_1(int x)
  8.   {
  9.     return add(x, 1);
  10.   }
复制代码
 楼主| 发表于 2020-3-3 19:38:42 | 显示全部楼层
LH_Mouse 发表于 2020-3-3 19:36
GCC 允许在函数外面直接写汇编(相当于 VC 的 __declspec(naked) 里套汇编),写个 wrapper function 就 ...

但如果在C函数里的内联汇编JMP到函数之外呢?Ares里有这样的东西。
发表于 2020-3-3 19:54:21 | 显示全部楼层
西城杨柳 发表于 2020-3-3 19:38
但如果在C函数里的内联汇编JMP到函数之外呢?Ares里有这样的东西。

为啥要这么搞,不是很理解。

一般而言,类似 Syringe 这种属于 hotfix ,改原来的机器码用 jmp 飞到跳板上,然后 pusha,然后 call 一下你自己写的函数,如果有需要上下文的就从栈上取,返回以后把栈上的寄存器内容改掉 popa,再用 jmp 飞回去就是了。
 楼主| 发表于 2020-3-3 20:07:35 | 显示全部楼层
LH_Mouse 发表于 2020-3-3 19:54
为啥要这么搞,不是很理解。

一般而言,类似 Syringe 这种属于 hotfix ,改原来的机器码用 jmp 飞到跳板 ...

我也不理解。
不过Syringe写进去的是会引发异常的int3指令,然后由调试器处理异常。我用的也是int3,不过处理异常用了同一进程内的VEH。

有个问题想请教一下:对于注入DLL的调试,一般用什么工具?我一直没找到好的调试器,都是用Log调试的。
发表于 2020-3-3 20:23:25 | 显示全部楼层
西城杨柳 发表于 2020-3-3 20:07
我也不理解。
不过Syringe写进去的是会引发异常的int3指令,然后由调试器处理异常。我用的也是int3,不过 ...

https://x64dbg.com/

VEH 小心 OutputDebugStringA 爆炸(
 楼主| 发表于 2020-3-3 20:30:22 | 显示全部楼层
LH_Mouse 发表于 2020-3-3 20:23
https://x64dbg.com/

VEH 小心 OutputDebugStringA 爆炸(

多谢。
发表于 2020-3-14 20:17:39 | 显示全部楼层
占个楼,加油
发表于 5 天前 这篇帖子是使用手机发表的! | 显示全部楼层
神仙打架↑
发表于 前天 04:00 | 显示全部楼层
支持,楼主的MOD与主程序分离功能非常有意义。

C++大佬,只能仰视!
发表于 3 小时前 | 显示全部楼层
神仙打架我死了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY官方论坛

GMT+8, 2020-3-29 15:54 , Processed in 0.015045 second(s), 11 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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