汇编语言中的结构体与C流I/O函数使用
一、结构体(Structs)
在汇编语言中,使用与C兼容的结构体相对简单。结构体是一种复合对象,可以包含不同类型的数据项。
1.1 简单结构体访问
以C结构体 Customer 为例:
struct Customer {
int id;
char name[64];
char address[64];
int balance;
};
若要使用汇编代码访问该结构体数据,需知道每个数据项的偏移量:
mov rdi, 136
call malloc
mov [c], rax
mov [rax], dword 7
lea rdi, [rax+4]
lea rsi, [name]
call strcpy
mov rax, [c]
lea rdi, [rax+68]
lea rsi, [address]
call strcpy
mov rax, [c]
edx, [balance]
[rax+132], edx
然而,使用具体数字表示结构体偏移量并非理想做法。若结构体发生变化,代码也需修改,且计算偏移量时易出错。
1.2 符号化偏移量名称
Yasm提供了 struc 关键字来定义结构体,结构体组件在 struc 和 ends true
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



