【发布时间】:2014-05-08 00:20:14
【问题描述】:
如何将这段汇编代码翻译成 C 代码?
大会:
foo:
dd 1
dd 2
dd 3
dd baa - foo
dw 5
dw 6
; ....
baa:
db 00
db 00
;...
C
struct foo
{
int a;
int b;
int c;
int d;
short e;
shot f;
};
struct baa
{
int a;
int b;
};
然后:
foo f;
baa b;
f.a = 1;
f.b = 2;
f.c = 3;
f.d = ?? // how do I translate this?
f.e = 5;
f.f = 6;
b.a = 0;
b.b = 0;
【问题讨论】:
-
我在想
f.d = sizeof(foo)。 -
@FredLarson: 如果
y关注x,x - y的大小为y? -
@Jack:它正在计算两个标签地址之间的差异。如果您选择将这些视为 C 中的结构,则结果将是第一个结构的大小,假设它们在内存中是相邻的。
-
@Michael:谢谢。实际上我已经尝试过了,但它在 C 版本中给出了不同的结果。那么错误应该来自另一个来源。我做了 struct 因为它适合 fread()/fwrite() 调用,并且并非所有成员都具有相同的类型大小,例如 int (dd) 和 short(dw)。还有什么方法可以代替?
-
结构包含的成员是否比您显示的更多?如果是这样,编译器可能会插入一些填充来对齐某些成员。您可以尝试将
__attribute__ ((__packed__))添加到结构中(或者如果您不使用 gcc,则编译器使用的任何内容)。