能力值:
(RANK:10 )
|
-
-
2 楼
RT
|
能力值:
(RANK:300 )
|
-
-
3 楼
你希望拦截了他的 API,便跳到你的函数做处理吗 ? 为甚么你不能用直接的 call 去呼叫你的函数 ? 我不明白
我以前写拦截 API 的东西,就是当 dll 加载,便更新它的 IAT ,把我的函数位置写入去,当它呼叫 API 的时候,便会来到我的函数。我的函数格式跟原来的 API 设计成一样,在 C 原码里使用 “WINAPI” (等于 FAR PASCAL) 这个calling convention
eg : 拦截 MessageBoxA
我的函数宣告是
int WINAPI NewMessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT Type );
|
能力值:
( LV13,RANK:370 )
|
-
-
4 楼
估计是VC生成的函数框架代码影响了你的代码,试试用naked:
void __declspec(naked) MyNakedFunction() { // Naked functions must provide their own prolog. __asm { PUSH EBP MOV ESP, EBP SUB ESP, __LOCAL_SIZE }
// Add your own code here... // ...... // And we must provide epilog. __asm { POP EBP RET } }
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
深有体会
void __declspec(naked)
确实减少了很多内嵌汇编的麻烦
|
能力值:
(RANK:10 )
|
-
-
6 楼
哦 受教 有没有在编译器上选择 选项 就可以把编译器加上的代码 去掉呢?
|
能力值:
( LV13,RANK:370 )
|
-
-
7 楼
没有
|
能力值:
(RANK:10 )
|
-
-
8 楼
谢谢4楼5楼
|
能力值:
(RANK:10 )
|
-
-
9 楼
成功
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
嗯 学习 void __declspec(naked) 是叫 编译器别自作聪明的加东西是吧 比如一些堆栈的保护。。
|
能力值:
(RANK:10 )
|
-
-
11 楼
收藏!
|
能力值:
( LV5,RANK:60 )
|
-
-
12 楼
老罗最近可好?
哈,有时编译器就是自作聪明,我写了一个多线程读写同一个bLocked变量来同步的东东,线程1只写,线程2只读,在线程2中
...
while (bLocked);
dosomething();
...
结果它给我编译成了
mov al,bLocked
test al,al
jne label
call dosomething
...
ret
label:
jmp label
虽然我这样写有些不规范,但...
|
能力值:
( LV13,RANK:370 )
|
-
-
13 楼
最初由 NoneName 发布 老罗最近可好?
哈,有时编译器就是自作聪明,我写了一个多线程读写同一个bLocked变量来同步的东东,线程1只写,线程2只读,在线程2中 ... while (bLocked); ........
呵呵,VC并没有编译错啊...
|
能力值:
( LV5,RANK:60 )
|
-
-
14 楼
最初由 luocong 发布
呵呵,VC并没有编译错啊...
唉,都是我的错~~~~~
你的签名真有个性~:D
|
|
|