首页
社区
课程
招聘
[旧帖] [求助]驱动中内联汇编后的地址动态重定位问题? 0.00雪花
发表于: 2012-5-19 16:17 1082

[旧帖] [求助]驱动中内联汇编后的地址动态重定位问题? 0.00雪花

2012-5-19 16:17
1082
DDK编译驱动中,我发现offset确定的偏移和函数地址是静态的,如果将代码copy一块内存去执行那么地址就不对头了。
下面是我测试的一个函数,直接调用没问题,但是ExAllocatePool后把函数复制进去执行却总是蓝屏,我真的要奔溃了,我发现可能是DbgPrint函数的地址问题,可是试了 push xxxx ret 和 mov eax, xxxx jmp eax硬编码还是蓝屏。求大牛帮帮忙啊?这段函数怎么写可以copy执行,而且我里面有硬编码怎么去除呢?
__declspec(naked) MyTest()
{
	__asm{
		/////////////////////////////////////////////////////////////////
		//Code here
		//
		pushad 
		pushfd
		call	_next
  _next:
		pop		eax
		add		eax, 14	 //加上14字节调到下面的_title数据区
		push    eax		 //1 byte
		call	DbgPrint //5 bytes
		pop		eax		 //1 byte
		popfd			 //1 byte
		popad			 //1 byte
		ret				 //1 byte

		/////////////////////////////////////////////////////////////////
		//Data here 
		//
//_title:
		_emit 0x41
		_emit 0x42
		_emit 0x43
		_emit 0x44
		_emit 0x45
		_emit 0x46
		_emit 0x47
		_emit 0x48
		_emit 0x49
		_emit 0x50
		_emit 0x00
	}

}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 44
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
OH YE !我解决了,call指令是push next_address jmp target_address 的结合,而我忘记把返回地址压入栈中了,所以DbgPrint执行完后不知道返回到哪里了。
真是细节决定成败啊!!!
贴个修正的源码,以供借鉴。
__declspec(naked) void MyTest()
{
	__asm{
		/////////////////////////////////////////////////////////////////
		//Code here
		//
		pushad 
		pushfd

		lea		eax, _title
		push    eax	
		mov		ebx,  80528E72h	;The 80528E72h is address of DbgPrint function
		lea		eax, _continue	;The return address
		push	eax				;Push the return address,be sure to remember!!!
		jmp		ebx
_continue:
		pop		eax

		popfd			
		popad			
		ret				

		/////////////////////////////////////////////////////////////////
		//Data here 
		//
_title:
		_emit 0x41
		_emit 0x42
		_emit 0x43
		_emit 0x44
		_emit 0x45
		_emit 0x46
		_emit 0x47
		_emit 0x48
		_emit 0x49
		_emit 0x50
		_emit 0x00
	}
}
2012-5-20 15:34
0
游客
登录 | 注册 方可回帖
返回
//