首页
社区
课程
招聘
新手学习,诸多问题待高手解答.
发表于: 2008-3-22 22:20 5781

新手学习,诸多问题待高手解答.

2008-3-22 22:20
5781
问题一:
EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,EIP (这些都是什么意思,什么地方有详细的说明?)


问题二:
看过一位高人写的东西,如下.
───────────────────────────────────────────────────
00403D8D    FF15 A0D04000   CALL DWORD PTR DS:[<&kernel32.CreateFile>; kernel32.CreateFileA  ==打开自己。

00401C23    FF15 3CD04000   CALL DWORD PTR DS:[<&kernel32.SetFilePoi>; kernel32.SetFilePointer  ==去文件尾。

00403926    FF15 6CD04000   CALL DWORD PTR DS:[<&kernel32.ReadFile>] ; kernel32.ReadFile  ==读1000字节。

00401C23    FF15 3CD04000   CALL DWORD PTR DS:[<&kernel32.SetFilePoi>; kernel32.SetFilePointer  ==去文件尾(就是上面的代码啦)。

0040102E    E8 EE030000     CALL dumped_.00401421  ==可以看到401421/4013ca/4013bf都被调用了3次
00401033    53              PUSH EBX                      ==401421就是设置文件指针,4013ca读文件
00401034    8D5424 30       LEA EDX,DWORD PTR SS:[ESP+30]
00401038    6A 06           PUSH 6
0040103A    52              PUSH EDX
0040103B    E8 8A030000     CALL dumped_.004013CA
00401040    8D4424 38       LEA EAX,DWORD PTR SS:[ESP+38]
00401044    50              PUSH EAX
00401045    E8 75030000     CALL dumped_.004013BF
0040104A    6A 02           PUSH 2
0040104C    6A F4           PUSH -0C
0040104E    53              PUSH EBX
0040104F    8BE8            MOV EBP,EAX
00401051    E8 CB030000     CALL dumped_.00401421
00401056    53              PUSH EBX
00401057    8D4C24 44       LEA ECX,DWORD PTR SS:[ESP+44]
0040105B    6A 06           PUSH 6
0040105D    51              PUSH ECX
0040105E    E8 67030000     CALL dumped_.004013CA
00401063    8D5424 4C       LEA EDX,DWORD PTR SS:[ESP+4C]
00401067    52              PUSH EDX
00401068    E8 52030000     CALL dumped_.004013BF
0040106D    6A 02           PUSH 2
0040106F    6A FA           PUSH -6
00401071    53              PUSH EBX
00401072    894424 54       MOV DWORD PTR SS:[ESP+54],EAX
00401076    E8 A6030000     CALL dumped_.00401421
0040107B    83C4 44         ADD ESP,44
0040107E    8D4424 28       LEA EAX,DWORD PTR SS:[ESP+28]
00401082    53              PUSH EBX
00401083    6A 07           PUSH 7
00401085    50              PUSH EAX
00401086    E8 3F030000     CALL dumped_.004013CA
0040108B    8D4C24 34       LEA ECX,DWORD PTR SS:[ESP+34]
0040108F    51              PUSH ECX
00401090    E8 2A030000     CALL dumped_.004013BF
00401095    83C4 10         ADD ESP,10
00401098    8D5424 30       LEA EDX,DWORD PTR SS:[ESP+30]
0040109C    894424 14       MOV DWORD PTR SS:[ESP+14],EAX
004010A0    68 80000000     PUSH 80
004010A5    52              PUSH EDX
004010A6    FF15 08D04000   CALL DWORD PTR DS:[<&kernel32.GetSystemD>; kernel32.GetSystemDirectoryA  ==很明显了
004010AC    BF 5C704000     MOV EDI,dumped_.0040705C                 ; ASCII "\help3721.dll"  ==看到3721就有点&^$#$@#感觉$%^%#$

00403D8D    FF15 A0D04000   CALL DWORD PTR DS:[<&kernel32.CreateFile>; kernel32.CreateFileA  ==生成%systemdir%\help3721.dll

00401C23    FF15 3CD04000   CALL DWORD PTR DS:[<&kernel32.SetFilePoi>; kernel32.SetFilePointer  ==去文件头

004011BE    FF15 04D04000   CALL DWORD PTR DS:[<&kernel32.GetTempPat>; kernel32.GetTempPathA  ==图片要解在临时目录
004011C4    BF 30704000     MOV EDI,dumped_.00407030                 ; ASCII "80C834BC.jpg"

00403D8D    FF15 A0D04000   CALL DWORD PTR DS:[<&kernel32.CreateFile>; kernel32.CreateFileA  ==生成图片

00401266    FF15 C0D04000   CALL DWORD PTR DS:[<&shell32.ShellExecut>; shell32.ShellExecuteA  ==打开图片

00401276    FF15 60D04000   CALL DWORD PTR DS:[<&kernel32.WinExec>]  ; kernel32.WinExec  ==用rundll32打开help3721.dll
                                                                                         ==rundll32 %system%\help3721.dll,Rundll32
───────────────────────────────────────────────────
第一句:00403D8D    FF15 A0D04000   CALL DWORD PTR DS:[<&kernel32.CreateFile>; kernel32.CreateFileA  ==打开自己。

第二句:00401C23    FF15 3CD04000   CALL DWORD PTR DS:[<&kernel32.SetFilePoi>; kernel32.SetFilePointer  ==去文件尾。

第三句:00403926    FF15 6CD04000   CALL DWORD PTR DS:[<&kernel32.ReadFile>] ; kernel32.ReadFile  ==读1000字节。

第四句:00401C23    FF15 3CD04000   CALL DWORD PTR DS:[<&kernel32.SetFilePoi>; kernel32.SetFilePointer  ==去文件尾(就是上面的代码啦)。


请问第一句,他是如何看出(==打开自己。)那句是写的打开自己?第二句,他又是如何看出(==去文件尾。)那句是写的去文件尾?第三句,第四句,问题一样!
───────────────────────────────────────────────────
问题三:
↓是什么  ↓是什么? ↓是什么?  ↓是什么? ↓是什么?  ↓是什么?   ↓是什么?                   ↓是什么?
00403D8D  FF15       A0D04000    CALL       DWORD       PTR         DS:[<&kernel32.CreateFile>;   kernel32.CreateFileA

上面的分别是什么?表示什么?在什么地方显示值?谢谢。

───────────────────────────────────────────────────
问题四:
请高手们帮忙,像我这样什么都不会的菜鸟,第一步应该从什么地方学起?谢谢大家了.小菜对软件比较感兴趣.

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

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 225
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,你的问题一、二、三,很好回答,找本汇编书翻翻来得实在,这里没有人有空回答你那么多。
2008-3-22 23:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请问什么书好,大家能介绍下吗?谢谢了

就是最基础的那种从0开始的。
2008-3-23 00:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好手帮忙解答一下好吗?
2008-3-24 04:44
0
雪    币: 50161
活跃值: (20620)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
http://bbs.pediy.com/showthread.php?t=31840

汇编书,论坛上不少人用王爽写的那本,你可以到网上书店看看。
2008-3-24 09:22
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
偶想没人可以帮你.
2008-3-24 12:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
王爽写的那本叫什么名字?能告诉一下吗?谢谢 具体点,我去买本。
2008-3-25 06:21
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
8
没人愿意当好人啊,唉。
有些东西其实入门不要太系统的学,没有一些经验直接学一大堆东西会不消化。

我就从字面上回答你的问题吧

问题一:
EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,EIP (这些都是什么意思,什么地方有详细的说明?)


答:
E代表32位宽度,访问的时候一次操作32个二进制位。
EAX,EBX,ECX,EDX 是CPU的4个零时寄存器,这些寄存器可以可以通过AX,BX,CX,DX访问他们的低16位,这低16位又可以通过AH,AL,BH,BL,CH,CL,DH,DL来访问高8位和低8位。
ESI=Stack Index,直接翻译过来是堆栈索引。这个寄存器可以通过SI操作低16位,但无法继续拆开访问。如果从汇编角度而言,它和以上4个寄存器没有本质区别。不过高级语言编译器和一些习惯上的用法使它经常用来指向当前栈帧中的某个地址偏移。
EDI=Data Index,同上,这个是数据索引,操作一个数据段的时候用来代表当前指针位置的一个寄存器。可以当作一般寄存器用,但只能拆分到16位低位DI。
ESP=Stack Pointer,这个寄存器比较特殊。基本功能和以上所有寄存器都一样,通过SP访问低16位。这个寄存器通常来表示当前堆栈的栈底位置。当一个PUSH指令执行时,如果原数据是16位,这个寄存器减2,是32位的话减4。2和4是其对应的字节数,当一个POP指令执行时,这个寄存器加4或者加2。这个寄存器的数据代表了一个地址,它用来保存PUSH,POP或者更宽的PUSHAD、PUSHFD,POPAD,POPFD指令往内存存储数据的位。同样的,如果不考虑进出堆栈对其数据的影响和其他需要用堆栈的地方,这个寄存器也可以当作普通寄存器使用。有些函数通过或者RETN指令实现对栈址的平衡,其实就是向ESP加上一个数值。
RETN 0C

等价于
ADD ESP,0CH
RETN

或者
RETN

返回后
ADD ESP,0CH

EBP和ESP是一对,ESP指向栈底,EBP指向栈顶,栈帧的起始位置通常由这个寄存器保存,方便程序使用EBP-OFFSET来访问当前栈帧当中的局部变量。这个寄存器也可以当作普通寄存器使用。
EIP=Instruction Pointer,代表当前执行指令的地址,不可以直接对此寄存器操作。只能通过RETN,JMP,CALL间接对它操作。

我没文化,误导之处还请各位大侠指正。
2008-3-25 08:45
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
9
请问第一句,他是如何看出(==打开自己。)那句是写的打开自己?第二句,他又是如何看出(==去文件尾。)那句是写的去文件尾?第三句,第四句,问题一样!

对于这个问题,我想如果你有一些编成经验的话,应该知道如何调用一个API。
CreateFileA函数原型
HANDLE WINAPI CreateFileA(
  LPCTSTR lpFileName,
  DWORD dwDesiredAccess,
  DWORD dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD dwCreationDisposition,
  DWORD dwFlagsAndAttributes,
  HANDLE hTemplateFile
);
假如要在程序中调用,往往会这样:
CreateFileA(参数1,参数2,参数3,参数4,参数5,参数6,参数7);

到了汇编中就成了这样:
PUSH 参数7
PUSH 参数6
PUSH 参数5
PUSH 参数4
PUSH 参数3
PUSH 参数2
PUSH 参数1
CALL CreateFileA

这里顺便解释第三个问题
00403D8D FF15 A0D04000 CALL DWORD PTR DS:[<&kernel32.CreateFile>; kernel32.CreateFileA
代码在内存中地址 机器码 反汇编
2008-3-25 09:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢楼上的兄弟呵呵,回答的很详细``
2008-3-26 23:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
00403D8D FF15 A0D04000 CALL DWORD PTR DS:[<&kernel32.CreateFile>; kernel32.CreateFileA
代码在内存中地址 机器码 反汇编

这句有些没明白???

那个是机器码?那个代表反汇编,可以详细些吗?谢谢

↓是什么  ↓是什么? ↓是什么?  ↓是什么? ↓是什么?  ↓是什么?   ↓是什么?                   ↓是什么?
00403D8D  FF15       A0D04000    CALL       DWORD       PTR         DS:[<&kernel32.CreateFile>;   kernel32.CreateFileA

上面的分别是什么?表示什么?在什么地方显示值?谢谢。
2008-3-26 23:07
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
12

↓^是地址^↓^^^^是机器码^^^^↓^^^^^^^^^^^^^^^是汇编指令 ^^^^^^^^^^^^^^^^^^↓^^^^^^^是注释^^^^↓
  00403D8D  FF15     A0D04000  CALL  DWORD  PTR  DS:[<&kernel32.CreateFile>;   kernel32.CreateFileA
2008-3-27 20:42
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
13
兄弟是不能乱叫的
2008-3-27 22:02
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
14
难道...难道...
2008-3-27 22:10
0
雪    币: 215
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
难道...难道...
2008-3-28 00:58
0
雪    币: 107
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
王爽那本书讲的太浅了,看完了也只能是入门。
2008-3-28 04:11
0
游客
登录 | 注册 方可回帖
返回
//