告诉你思路在网上找代码,一找一大堆用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,具体的如果有问题请自己试着改改,也就哪几种方式
那么为方便使用,宏定义:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|