网站建议:179001057@qq.com

汇编中的结构体表示

技术2022-05-12  0

我认为,汇编中一切皆地址。

在c/c++使用很多的结构体,在汇编中是如何表示的呢?其实,在汇编中根本就没有什么结构体的概念,结构体本质就是一堆连在一起的数据。只不过有人把他们想象成一个整体,并以此产生结构体的概念,这与结构体中带有变长数组时候的情形一样:

struct Test { int x; char c; int cnt; int data[0]; Test() { x = 0; c = 0; cnt = 0; } };  

其实上面这个结构体尾部带有的变长数组,data[0]与结构体Test没有任何关系,sizeof(Test)就知道。

 

结构体在汇编是如何表示的呢?

譬如如何访问Test中的x成员,其实就是采用地址偏移的方式,根据定义的Test对象的起始地址,偏移一定的大小就可以访问结构体中的不同成员了。

 

测试代码:

struct Test { int x; char pstr; int c; Test() { x = 0; pstr = 0; c = 0; } }; int main() { struct Test t; t.x = 3; t.c = 'x'; return 0; } 

 

gcc -S xxxx

 

产生的汇编代码如下:

.file "struct.cpp" .section .text._ZN4TestC1Ev,"axG",@progbits,_ZN4TestC1Ev,comdat .align 2 .weak _ZN4TestC1Ev .type _ZN4TestC1Ev, @function _ZN4TestC1Ev: .LFB4: pushl

转载请注明原文地址: https://ibbs.8miu.com/read-1650380.html

最新回复(0)