能力值:
( LV5,RANK:60 )
|
-
-
3 楼
哦,谢谢
又看了半天,终于明白了,原来对着呢
我看了一下_LDR_MODULE结构
终于明白了~
|
能力值:
( LV5,RANK:60 )
|
-
-
4 楼
现在又有一些其他的问题了
1. P120页
妙用内存-另类的API调用方式
下面一段是:
[QUOTE=failwest;450347]
我们经常会遇到API中需要一个很大的结构体做参数的情况。通过实验可以发现,大多数情况下,健壮的API都可以允许两个结构体相互重叠,尤其是当一个参数是输入结构体[in],另一个用作接收的结构全[out]时,如果让参数指向同一个结构体,函数往往也能正确执行。
这种情况下,仅仅用一个字节的短指令"push esp"就可以代替一大段初始化[out]结构体的代码。
[/QUOTE]
这段红色的文字是什么意思,看了N久也没明白为什么……
2. P147页
堆缓存,是个什么东东???
能详解一下吗??
3. P167-168页
想不明白,为什么将h5的的flink写成0x00000000,blink写成0x44444444,在这块堆被分配的时候,就会将0x44444444写入0x00000000的地址处???
现在实在想不明白DWORD SHOOT的原理……
3Q
|
能力值:
( LV5,RANK:60 )
|
-
-
5 楼
[QUOTE=救世猪;449197]1. P97 5.4.1定位API的原理
ExitProcess写成了ProcessExit了吧
2.P103 定位Kernel32.dll的代码:
mov ebx, fs:[edx+0x30]
mov ecx, [ebx+0x0c]
mov ecx, [ecx+0x1c] ...[/QUOTE]
这个我还是不懂啊,能给我讲讲吗?
谢谢~!~!
|
能力值:
( LV5,RANK:60 )
|
-
-
6 楼
我跟踪了几次了解了。
也明白了。谢谢~!~!
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
今天晚上又看了一下
第三个问题搞明白了…………
原来如此如此……
把Node->blink->flink=Node->flink又仔细的想了一下终于明白了……
|
能力值:
( LV5,RANK:60 )
|
-
-
8 楼
把你弄懂的拿出来分享一下吧。谢谢
|
能力值:
( LV5,RANK:60 )
|
-
-
9 楼
呵呵,是不是再抄一篇书?
|
能力值:
( LV5,RANK:60 )
|
-
-
10 楼
当然不是,就是把你理解这个代码的过程说说啊.具体的原理.
我没有从原理上理解,只是跟踪了一下,知道代码没问题啊.
|
能力值:
( LV5,RANK:60 )
|
-
-
11 楼
删除节点的操作是:
Node->blink->flink=Node->flink
Node->flink->blink=Node->blink
而Node->blink已经被设置为0了
所以,Node->blink-flink实际上是执行的[Node->blink]=Node->flink=44444444
所以实际上就是[00000000]=44444444
而Node->flink->blink同理就是[Node->flink+4]=Node->blink
|
能力值:
( LV5,RANK:60 )
|
-
-
12 楼
不是这个,我还没看到这里.
我才看到你说的第一个问题那里.
请你说说你对第一个问题的原理的解释.
谢谢
|
能力值:
( LV5,RANK:60 )
|
-
-
13 楼
第一个我也不懂…………
到现在也没明白~~~
|
能力值:
( LV5,RANK:60 )
|
-
-
14 楼
mov ebx, fs:[edx+0x30]
mov ecx, [ebx+0x0c]
mov ecx, [ecx+0x1c] ;此时ecx应该是IninitializationOrderModuleList,它应该指向ntdll.dll吧
mov ecx, [ecx] ;ecx = second entry in list (kernel32.dll)
mov ebp, [ecx+0x08]
我说的这段代码的解释啊.
这段代码我懂了,但是_LDR_MODULE结构之类的就不明白了.
|
能力值:
( LV5,RANK:60 )
|
-
-
15 楼
PEB_LDR_DATA结构如下:
typedef struct _PEB_LDR_DATA
{
ULONG Length; // +0x00
BOOLEAN Initialized; // +0x04
PVOID SsHandle; // +0x08
LIST_ENTRY InLoadOrderModuleList; // +0x0c
LIST_ENTRY InMemoryOrderModuleList; // +0x14
LIST_ENTRY InInitializationOrderModuleList;// +0x1c
} PEB_LDR_DATA,*PPEB_LDR_DATA; // +0x24
_LDR_MODULE的结构是这样的:
typedef struct _LDR_MODULE
{
LIST_ENTRY InLoadOrderModuleList; // +0x00
LIST_ENTRY InMemoryOrderModuleList; // +0x08
LIST_ENTRY InInitializationOrderModuleList;// +0x10
PVOID BaseAddress; // +0x18
PVOID EntryPoint; // +0x1c
ULONG SizeOfImage; // +0x20
UNICODE_STRING FullDllName; // +0x24
UNICODE_STRING BaseDllName; // +0x2c
ULONG Flags; // +0x34
SHORT LoadCount; // +0x38
SHORT TlsIndex; // +0x3a
LIST_ENTRY HashTableEntry; // +0x3c
ULONG TimeDateStamp; // +0x44
// +0x48
} LDR_MODULE, *PLDR_MODULE;
mov ecx, [ecx+0x1c] ;此时ecx应该是IninitializationOrderModuleList,它现在在ntdll.dll的LDR_MODULE中
mov ecx, [ecx] ;此时就到了kernel32.dll的LDR_MODULE中了
mov ebp, [ecx+0x08]
你仔细看一下这两个结构应该就会明白的
|
能力值:
( LV5,RANK:60 )
|
-
-
16 楼
我自己跟踪的时候我已经理解这段代码了.
就是想要一些关于这些结构的定义,很更详细的说明而已了.哈哈~!
谢谢你,好兄弟.
|
能力值:
( LV5,RANK:60 )
|
-
-
17 楼
顺便问下,这些结构在哪个头文件中定义的?
|
能力值:
( LV5,RANK:60 )
|
-
-
18 楼
在网上搜的,呵呵~
|
能力值:
( LV3,RANK:30 )
|
-
-
19 楼
这幅图可以说明
|
|
|