能力值:
( LV10,RANK:170 )
|
-
-
26 楼
我觉得应该改为
......
sub ebx,Dels
lea edx,[ebx+szData]
.......
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
[QUOTE=hatling;607581]我觉得应该改为
......
sub ebx,Dels
lea edx,[ebx+szData]
.......
[/QUOTE]
这两个不是一样的么!
|
能力值:
( LV9,RANK:220 )
|
-
-
28 楼
to recnad:
to hatling:
你们的一个是sub ebx, dels 一个是lea ebx, [ebx - Dels] 。
多此一举。
本身求出来dels的偏移,直接+相对偏移就是重定位地址了。。
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
明白了 ...
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
弱弱的问一下,pop ebx之后,程序ret时又返回到哪里去了?不解
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
貌似还有一种方法,是《Windows核心编程》里面的。说是在需要字符串入栈的地方,直接call,如下:
call arg2
db "text2",0
arg2:
call arg1
db "text1",0
arg1:
...
但是照你这么说的话,call就应该是相对地址了。那么怎么让call把绝对地址入栈呢?我的想法是call far arg1,不知道对不对……希望楼主解释一下,谢谢~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
[QUOTE=xfish;607729]to recnad:
to hatling:
你们的一个是sub ebx, dels 一个是lea ebx, [ebx - Dels] 。
多此一举。
本身求出来dels的偏移,直接+相对偏移就是重定位地址了。。[/QUOTE]
直接+相对偏移就是重定位地址了, 但是这个相对偏移每次还要用变量的地址减去offset dels来算出, 这样写代码时也比较麻烦阿。
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
学习了,希望楼主讲的在详细点 让我们这些小菜也能听懂啊
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
返回地址是call的返回地址,也就是dels
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
好文章,确实很好
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
光问问题没啥用,自己实践一下就会全明白楼主说的意思了~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
37 楼
哎,还是老掉牙的法方重定位,杀软早就盯上了,其实还有其他方法,比如seh等
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
call Dels2
Dels:
int 3
int 3
Dels2:
pop ebx
lea edx, [ebx + szText - Dels] ; edx = szText
ret
先顶下,再问!
请问楼主?
pop ebx ;这里出栈了,
后面就直接ret,不会导致堆栈不平衡吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
楼主是不是一不小心打错了哦,,,,,
我也觉得不能ret啊,,,断点地址已经弹出来了,,,再ret的话就是一个未知地址了,,, 我觉得程序肯定会出错,,,
lea edx, [ebx + szText - Dels] ; edx = szText
后面应该直接执行到程序退出吧
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
[QUOTE=hackerlx;629276]楼主是不是一不小心打错了哦,,,,,
我也觉得不能ret啊,,,断点地址已经弹出来了,,,再ret的话就是一个未知地址了,,, 我觉得程序肯定会出错,,,
lea edx, [ebx + szText - Dels] ; edx = szText
后面应该直接执行到程序退出吧[/QUOTE]
有道理,是不是应该在pop后加个push呢
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
lea edx, [ebx + szText - Dels] ; edx = szText
ret 不用加的.
加了程序就退出了.
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
好文,mark一下
|
能力值:
( LV5,RANK:60 )
|
-
-
43 楼
[QUOTE=huzg胡;623300]call Dels2
Dels:
int 3
int 3
Dels2:
pop ebx
lea edx, [ebx + szText - Dels] ; edx = szText
ret
先顶下,再问!
请问楼主...[/QUOTE]
这个ret是和“__Entry”配对用的,和重定位无关。
楼主的意思这是个完整的子程序。
|
能力值:
( LV2,RANK:10 )
|
-
-
44 楼
好文,终于明白了!
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
您的代码 是看懂了但您说的还是看不懂,call Dels2, call Dels ?
|
能力值:
( LV2,RANK:10 )
|
-
-
46 楼
好文章,顶了
|
能力值:
( LV4,RANK:50 )
|
-
-
47 楼
看了很久才明白
|
能力值:
( LV2,RANK:10 )
|
-
-
48 楼
学习了..比较清晰..感谢LZ
|
能力值:
( LV12,RANK:360 )
|
-
-
49 楼
感染后,Dels2 的地址和Dels1的地址不会变吗?
|
能力值:
( LV4,RANK:50 )
|
-
-
50 楼
其实下面的两段代码是比较常见的。
第一段:将数据写入代码段
.386 .model flat,stdcall option casemap:none
include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib
.code
start: push 0h call _text db 'title',0 _text: call _function db 'Maybe we can write something here!',0 _function: push 0h call MessageBox invoke ExitProcess,NULL end start
第二段:将数据写入堆栈。
.386 .model flat,stdcall option casemap:none
include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib
.code
start: mov ebx,00000065h push ebx mov ebx,6c746974h push ebx mov eax,esp mov ebx,00002165h push ebx mov ebx,72656820h push ebx mov ebx,676e6968h push ebx mov ebx,74656d6fh push ebx mov ebx,73206574h push ebx mov ebx,69727720h push ebx mov ebx,6e616320h push ebx mov ebx,65772065h push ebx mov ebx,6279614dh push ebx mov ebx,esp push 0 push eax push ebx push 0 call MessageBox pop eax pop eax pop eax pop eax pop eax pop eax pop eax pop eax pop eax pop eax pop eax invoke ExitProcess,NULL end start
编译运行后图示如下
|
|
|