能力值:
( LV2,RANK:10 )
|
-
-
2 楼
高手们帮帮小弟,真的是很困惑。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
零区域是什么
空白内存吗
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我也发现经常修改源代码jmp到一个空白的地方,写点东西后,跳回来运行几个函数就会出错,是把堆栈给冲了吗?~~想不通~~修改optional header里的sizeofstackreserve可以增加堆栈大小不?~~
|
能力值:
( LV5,RANK:60 )
|
-
-
5 楼
注意保存堆栈的数据,保证平衡就没事。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
不好意思,我是新手,请问怎么保证堆栈平衡?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
听说要先push add,在pop add?这里的address指的是哪里的地址?
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
是保存寄存器和堆栈的内容并不是保存地址,用pushad吧,这个操作数能保存所有寄存器的内容;而对于堆栈的内容就是把你自已手动入栈的东西在执行完函数之后让他出栈,也就是说要保证在执行完函数之后堆栈的内容和顺序与函数执行前一样。
我也是新手可能有不少地方说错了,这只是我个人的理解,希望高手帮我把错误指出来
|
能力值:
(RANK:260 )
|
-
-
9 楼
看样子你跳到了导入表的位置。
应该在代码段的尾部找空白空间,而不是随便找个用0填充的位置都可以。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
多谢多谢,但是我还是不明白,pushad和popad应该在哪里用?是先pushad,然后jmp到零区域,运行完后jmp回来,然后popad么?这样还是不行啊
|
能力值:
( LV9,RANK:490 )
|
-
-
11 楼
那也仅仅是保存现场,你跳出去之后,push多少,就要pop多少,也就是跳前后堆栈不能改变
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
我跳出去后没有用push啊,就是这样的几句
004026EE |. FF15 A4304000 CALL DWORD PTR DS:[<&MSVCRT.exit>] ; \exit
004026F4 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
004026F7 |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
004026F9 |. 8B09 MOV ECX,DWORD PTR DS:[ECX]
顺便问一下。在哪里pop?push完马上pop?还是跳转回来之后再pop
|
|
|