首页
社区
课程
招聘
关于动态改变一个程序的汇编码的问题请教
发表于: 2004-11-28 13:24 4627

关于动态改变一个程序的汇编码的问题请教

2004-11-28 13:24
4627
我在一个程序运行的时候 用钩子 把DLL加载到他的进程空间  我截获一个重要的函数 然后跳转到我的函数做处理 然后在跳回去
问题来了  我用vc做 vc编译器给我跳转的地方提我处理了一下汇编 也就是给我的代码前加了一段汇编 使我不能 正确跳转  但是delphi写的话就可以delphi没有给我的汇编码前做预处理

请以前做过的 指点小弟一二

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (13)
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
RT
2004-11-28 13:25
0
雪    币: 2319
活跃值: (565)
能力值: (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 );
2004-11-28 13:40
0
雪    币: 1593
活跃值: (811)
能力值: ( 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
}
}
2004-11-28 13:44
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
深有体会
void __declspec(naked)
确实减少了很多内嵌汇编的麻烦
2004-11-28 13:56
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
6
哦 受教  有没有在编译器上选择 选项 就可以把编译器加上的代码 去掉呢?
2004-11-28 14:21
0
雪    币: 1593
活跃值: (811)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
7
没有
2004-11-28 14:39
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢4楼5楼
2004-11-28 14:57
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
成功
2004-11-30 14:58
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
嗯 学习 void __declspec(naked) 是叫 编译器别自作聪明的加东西是吧 比如一些堆栈的保护。。
2004-11-30 15:10
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
收藏!
2004-11-30 15:31
0
雪    币: 489
活跃值: (112)
能力值: ( 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

虽然我这样写有些不规范,但...
2004-11-30 16:36
0
雪    币: 1593
活跃值: (811)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
13
最初由 NoneName 发布
老罗最近可好?

哈,有时编译器就是自作聪明,我写了一个多线程读写同一个bLocked变量来同步的东东,线程1只写,线程2只读,在线程2中
...
while (bLocked);
........


呵呵,VC并没有编译错啊...
2004-11-30 16:41
0
雪    币: 489
活跃值: (112)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
最初由 luocong 发布


呵呵,VC并没有编译错啊...


唉,都是我的错~~~~~
你的签名真有个性~:D
2004-11-30 16:54
0
游客
登录 | 注册 方可回帖
返回
//