能力值:
(RANK:50 )
|
-
-
2 楼
DWORD MemAlloc = 0x12345678;
DWORD BaseDll;
__declspec(naked) void TestA()
{
__asm
{
mov eax, [esp]
sub eax, 1234h
test eax, eax
jne nothing
mov ebx,334h
retn
nothing:
mov eax,BaseDll
jmp[eax + MemAlloc]
}
IA32指令编码的时候支持寄存器+固定32位偏移,所以理论上可以这样……
}
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
[QUOTE=phpskycn;1205706]DWORD MemAlloc = 0x12345678;
DWORD BaseDll;
__declspec(naked) void TestA()
{
__asm
{
mov eax, [esp]
sub eax, 1234h
test eax, e...[/QUOTE]
谢谢楼上的解答,这样修改看起来可行,不过对于我这个程序实际应用起来不行,真实情况比我说的更复杂点,不好描述。
但是有一个问题是很明显的,就是改写了eax的值,如果[eax + MemAlloc]里面一开始就用到了eax的值也许会出现问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
思维定式了,其实没有我想象中那么复杂,解决了,真实问题是某位大牛前段时间发布的NnMapHack,再次感谢2L回答。
|
能力值:
(RANK:50 )
|
-
-
5 楼
额,这个。。。因为看到前面用过eax了。有必要的话push pop一下
汇编其实很简单,多看就明白了
|
|
|