能力值:
( LV4,RANK:50 )
|
-
-
2 楼
到FS:[0]所指向的内存单元取一个DWORD大小的数给EAX
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移 说明
000 指向SEH链指针
004 线程堆栈顶部
008 线程堆栈底部
00C SubSystemTib
010 FiberData
014 ArbitraryUserPointer
018 FS段寄存器在内存中的镜像地址
020 进程PID
024 线程ID
02C 指向线程局部存储指针
030 PEB结构地址(进程结构)
034 上个错误号
得到KERNEL32.DLL基址的方法
assume fs:nothing ;打开FS寄存器
mov eax,fs:[30h] ;得到PEB结构地址
mov eax,[eax + 0ch] ;得到PEB_LDR_DATA结构地址
mov esi,[eax + 1ch] ;InInitializationOrderModuleList
lodsd ;得到KERNEL32.DLL所在LDR_MODULE结构的InInitializationOrderModuleList地址
mov edx,[eax + 8h] ;得到BaseAddress,既Kernel32.dll基址
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
一般asm會有DWORD PTR FS:[0] 嗎
回答:32位壳程序经常使用,以构造SEH达到改变程序流程或者寄存器值的目的。
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
FS 是 32位 CPU 增加的 另一个寄存器
一般都是 用在异常处理的
PTR 跟 FS 要分开
去学学汇编基础吧.
dword ptr
byte ptr
word ptr
从内存中取的 大小
mov eax ,[ebx] 默认取 四个字节
mov al,byte ptr [ebx] 取一个字节
mov ax,word ptr [ebx] 取两个字节
以此类推...
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
可以把FS 看成DS。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
三楼正解
WinNT内核下内存采用保护模式,段寄存器的意义与实模式汇编下的意义不同了。
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
fs[0]就是异常入口队列的首指针(seh)
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
它也指向第一个处理异常函数的入口地址,具体可参考seh结构
struct _seh{
LPVOID lpFuncEntry;
struct _seh * lpNextSeh;
}
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
结构贴 错了,
struct _seh{
struct _seh * lpNextSeh;
LPVOID lpFuncEntry;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
建议看下异常处理机制
3楼正解
另外,FS存的是段选择子,而不是实模式下的高16位基地址
|
|
|