首页
社区
课程
招聘
求助:mov ecx,sizeof IMAGE_SECTION_HEADER
2015-4-15 15:55 5175

求助:mov ecx,sizeof IMAGE_SECTION_HEADER

2015-4-15 15:55
5175
如下:

mov        ecx,IMAGE_SECTION_HEADER



mov        ecx,sizeof IMAGE_SECTION_HEADER

是否一样,有什么区别,谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 2660
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 34 2015-4-15 16:08
2
0
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
雪    币: 40
活跃值: (696)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killerfive 2015-4-15 16:19
3
0
[QUOTE=安于此生;1365371]typedef struct _IMAGE_SECTION_HEADER {
  BYTE  Name[IMAGE_SIZEOF_SHORT_NAME];
  union {
    DWORD PhysicalAddress;
    DWORD VirtualSize;
  } Mis...[/QUOTE]

我当时也感到奇怪,这个是WIn32汇编书里给的代码
雪    币: 2660
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 34 2015-4-15 18:37
4
0
尽信书还不如无书
雪    币: 40
活跃值: (696)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killerfive 2015-4-16 11:28
5
0
感谢你的回复,我测试了,两条语句的功能是一样的,可以编译执行的
雪    币: 2660
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 34 2015-4-16 11:33
6
0
你用OD看看, 显示的效果是什么
雪    币: 183
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
大漠飘雪 2015-4-16 15:46
7
0
一样吗?路过
雪    币: 5450
活跃值: (1380)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
浙江螃蟹 2015-4-16 16:06
8
0
一样吗?我感觉不一样。
雪    币: 9587
活跃值: (4498)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lononan 2015-4-19 16:56
9
0
两句区别也挺简单的啊。
都是给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 不一定要用(),打个空格也是一样的。
雪    币: 11
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MClint 2015-5-21 18:46
10
0
C++内嵌汇编测试:

   _asm mov  ecx,IMAGE_SECTION_HEADER; // 编译为: mov         ecx,dword ptr ds:[0] ; 当然, 运行就会出错
   _asm mov  ecx,TYPE IMAGE_SECTION_HEADER; // 编译为: mov         ecx,28h; 不说了
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小xueya 2015-5-28 14:27
11
0
对的,第一个是指针,第二个是大小
游客
登录 | 注册 方可回帖
返回