Assembly 确定十六进制x86程序集中数据和代码段的大小
如果我正在查看汇编程序Assembly 确定十六进制x86程序集中数据和代码段的大小,assembly,x86,hex,Assembly,X86,Hex,如果我正在查看汇编程序.lst文件(列表文件),如何确定.data段和.code段的大小 这是否由段中的最后一个偏移确定?例如,下面是一个列表: 00000000 .data 00000000 00000019 iX dword 25,-2,-3 FFFFFFFE FFFFFFFD 0000000C 0011 FFFB sY word 17,-5,2 dup (17,-4)
.lst
文件(列表文件),如何确定.data段和.code段的大小
这是否由段中的最后一个偏移确定?例如,下面是一个列表:
00000000 .data
00000000 00000019 iX dword 25,-2,-3
FFFFFFFE
FFFFFFFD
0000000C 0011 FFFB sY word 17,-5,2 dup (17,-4)
00000002 [
0011 FFFC
]
00000018 00000003 [ bVal byte 3 dup(-1,23) ,35
FF 17
] 23
0000001F 00000015 iNum dword 21,-43
FFFFFFD5
00000027 41 42 43 34 35 bName byte "ABC456",29,'DEF'
36 1D 44 45 46
00000000 .code
00000000 _start:
00000000 B8 00000000 mov eax,0
00000005 A1 00000002 R mov eax, iX[2]
0000000A 03 05 0000001F R ADD eax, iNum
00000010 03 05 00000027 R ADD eax, dword ptr bName
00000016 FF 35 0000001F R PUSH iNum
0000001C FF 35 00000027 R PUSH dword ptr bName
00000022 66| 5B POP BX
00000024 5E POP ESI
数据段的大小是否为
27h
,代码段的大小是否为24h
?逻辑正常,执行不是:)最后一行的开始偏移量。数据确实是27h
,但它包含10个值,因此需要添加该值。与.code
类似,但这只增加了1个字节。好的。我知道.data
是27+(10*字节)=37h,但是你怎么知道代码段中的POP ESI
行只增加了1个字节?不,27h+10
不是37h
,因为10
是十进制的。因为每行都列出了字节,所以很容易对它们进行计数。POP ESI
是一个值为5E
的单字节。您是否也可以使用ESP(堆栈指针)-EBP(基本指针)确定段的大小?或者其他间接方法,可能不使用.lst?这可能是个愚蠢的问题,但我是jw。不幸的是,堆栈或基指针与此无关。但是当然还有其他的方法,比如普通的二进制格式通常有内部的报头给出大小,对于当前正在执行的程序,您可以查询操作系统。