Fasm在堆栈中声明结构

时间:2018-01-03 22:53:03

标签: assembly x86 stack structure fasm

由于某种原因,我无法正确地将其中的结构放入fasm中。这是问题所在,我想说我有这样的结构:

path('product_view', { product: product })
$this->generateUrl('product_view', ['product': product]);

据我所知,要在堆栈中声明这个,我需要写这样的东西:

struct IMAGE_SECTION_HEADER 
  _Name db IMAGE_SIZEOF_SHORT_NAME dup (?) 
  union 
    PhysicalAddress     dd ? 
    VirtualSize         dd ? 
  ends 
  VirtualAddress        dd ? 
  SizeOfRawData         dd ? 
  PointerToRawData      dd ? 
  PointerToRelocations  dd ? 
  PointerToLinenumbers  dd ? 
  NumberOfRelocations   dw ? 
  NumberOfLinenumbers   dw ? 
  Characteristics       dd ? 
ends

N 应该是结构的大小,但我怎样才能获得结构大小?据我所知,没有sizeof,我是否需要手动计算每个结构大小以在堆栈内存中声明它?另外,我如何使用宏声明它在堆栈框架内?

1 个答案:

答案 0 :(得分:0)

你不需要这个N,结构从esp开始,长度为N个字节。你只需要在堆栈上分配这个结构,所以这应该工作:

start:
virtual at esp
  @@:
  section IMAGE_SECTION_HEADER
  IMAGE_SECTION_HEADER_SIZE = $ - @b
end virtual  
sub esp, IMAGE_SECTION_HEADER_SIZE ;allocate local buffer
lea eax, [section]
...
add esp, IMAGE_SECTION_HEADER_SIZE ;;free local buffer