能力值:
( LV13,RANK:1760 )
|
-
-
2 楼
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;
DWORD VirtualAddress;
DWORD SizeOfRawData;
DWORD PointerToRawData;
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
mov ecx,IMAGE_SECTION_HEADER 明显类型不匹配,编译不通过...
mov ecx,sizeof IMAGE_SECTION_HEADER 这句是将IMAGE_SECTION_HEADER这个结构体所占的大小赋值给ecx
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
[QUOTE=安于此生;1365371]typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Mis...[/QUOTE]
我当时也感到奇怪,这个是WIn32汇编书里给的代码
|
能力值:
( LV13,RANK:1760 )
|
-
-
4 楼
尽信书还不如无书
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
感谢你的回复,我测试了,两条语句的功能是一样的,可以编译执行的
|
能力值:
( LV13,RANK:1760 )
|
-
-
6 楼
你用OD看看, 显示的效果是什么
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
一样吗?路过
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
一样吗?我感觉不一样。
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
两句区别也挺简单的啊。
都是给ECX赋值 ,唯一的区别就是 sizeof 这个标志
第一个 【mov ecx,IMAGE_SECTION_HEADER】,明显的,这里执行后,ECX=IMAGE_SECTION_HEADER 的指针(别说指针都不懂,这样我就难解释了)
第二个【mov ecx,sizeof IMAGE_SECTION_HEADER】
执行后,ECX=IMAGE_SECTION_HEADER 的大小。
这里要特别说明一下 ,其实是这样的:
sizeof IMAGE_SECTION_HEADER=sizeof(IMAGE_SECTION_HEADER)
这里只是作者懒得打了一个括号,要是打个括号,也许你就不用问这两个有什么区别了。
就像VC中 IF语句后面不一定要用{}一样,当且仅当IF语句后面只有一句代码的时候,是可以不用{}的。
所以这里的sizeof也差不多是这样,sizeof 不一定要用(),打个空格也是一样的。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
C++内嵌汇编测试:
_asm mov ecx,IMAGE_SECTION_HEADER; // 编译为: mov ecx,dword ptr ds:[0] ; 当然, 运行就会出错
_asm mov ecx,TYPE IMAGE_SECTION_HEADER; // 编译为: mov ecx,28h; 不说了
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
对的,第一个是指针,第二个是大小
|
|
|