如何取得某个模块的 fsfs段寄存器器的值

告诉你思路在网上找代码,一找一大堆用APIHOOK拦截“wsock32.dll”中“recv”函数,HOOK后的New_recv函数有三个参数套接字(int),封包指针(int),封包长度(int),其中套接字就是你要找的内容该函数返回int,返回0為全部通过大于0为通过的长度,-1为不通过在网上找“apihook”

据我了解,fs段寄存器器里的值根据不同的CPU指令随时都在变化 你怎么保证 EAX 里的徝永远是SOCKET 句柄?

如果Hook设计的好的话可以把过滤函数做成与Hook函数一样的原型来获得函数参数

用Detours吧,适合初学者百度一下

(这是我今天第彡次说这句话了)

是可以得到EAX的值,但是通常不这样做通常是查看EAX的值怎么来的,然后直接读取

可以在需要的位置 JMP 跳转到一段代码讲EAX嘚值 写入到你申请的内存中,然后跳回去然后你可以读取内存的值

匿名用户不能发表回复!

应该是可以的如果是类似于ARM的統一编址的话,访问内存和访问fs段寄存器器的汇编指令是一模一样的在C/C++一级都是一样的写法。但如果是X86这种独立编址的话访问内存和訪问fs段寄存器器的汇编指令是不一样的,但不确定在C/C++一级也可以采用同一种写法没有实际搞过不敢瞎说。

就统一编址的话说访问fs段寄存器器和访问内存是一样的,你想想访问内存是怎么访问的给出指针是吧,也就是地址是吧查到fs段寄存器器的实际物理地址,例如定時器的控制fs段寄存器器T0TCR地址为0x,那么对应的定义

你也可以看一下相关CPU的fs段寄存器器地址头文件中的定义格式:

T0TCR只是个宏名而已

你就理解这底层是怎么做的。

查一下VOLT的地址同时注意位宽,因为ARM的是32的所以fs段寄存器器一般也是32,所以用的是unsigend long具体到实际的CPU要对应的改改。

例如VOLT的地址为 0xA0001200CPU位宽为8BIT,具体的如果有问题请自己试着改改,也就哪几种方式

那么为方便使用,宏定义:




高手莫笑有兴趣的自己看看吧。

借用了一个人家的“调试器.EXE”请谅解

[此贴子已经被作者于 16:02:00编辑过]

原理是怎么样搞的?既然可以取eax的值?是不是可以置eax的值?

希望开源!!!!!!!!!!

顶,好东西开源就更好了!

这模块别用,这种东西开源才好用

MD,我搞这个光声明弄了半天才搞定,还是去国外论坛才找齐嘚.

哥们你应该开源放水了,为什么国外论坛就有源啊,咱国内就这么难找啊.

您的例程已被收录到资源网模块控件中,谢谢

好东西就拿出来开源吧!

靠白高兴,模块包装的都不能用了

带随机加密参数命令行的程序无法创建调试进程,能否加个功能把进程句柄传到模块中然后通过該句柄加载调试并读值

好东西``以后可以用易写内存注册机了哈
用户被禁言,该主题自动屏蔽!

我要回帖

更多关于 fs寄存器 的文章

 

随机推荐