原帖由 cellar 于 2006-11-30 12:33 发表
struct iphdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ihl:4;
unsigned int version:4;
#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned int version:4;
unsigned i ...
原帖由 mjdcl 于 2006-11-30 13:00 发表
IP网络中传输的所有报文都是大端对齐的,所以要存在host和network的字节序转换.
原帖由 mingyanguo 于 2006-11-30 12:58 发表
arm是不能访问奇地址的16bit数吧,奇地址的byte应该是没什么问题吧。
原帖由 cellar 于 2006-11-30 13:35 发表
请注意这里
复制代码
- //前面是双字节对齐的
- u_int8_t tos;
- u_int16_t tot_len;
我认为这里u_int8_t tos会被扩展成双字节存储。但实际测试的情况是并没有这样,而是仍然连续存储,那么下面的u_int ...
原帖由 hellioncu 于 2006-11-30 13:47 发表
u_int8_t tos前面只有1个字节呀,tot_len还是在偶数地址
原帖由 cellar 于 2006-11-30 13:48 发表
眼花花...
![]()
原帖由 hellioncu 于 2006-11-30 13:53 发表
说我还是说你自己呀?
原帖由 yg 于 2006-11-30 13:48 发表
32位系统,缺省情况下都是4字节对齐的。
变量是不会扩展的,但下一个非char型变量会从余4为0的地址开始。
原帖由 gvim 于 2006-11-30 14:03 发表
可以阿, 难道你的机器上 uchar[10]的数组 for 一遍会出错吗?
早期的arm ldr和str 只能够直接访问 8bit和32bit ,后来的比较新的arm加入了16bit的访问方式。
早期arm需要处理16bit时,是由编译器帮你做位变换, ...
原帖由 yg 于 2006-11-30 14:20 发表
#pragma pack (1)
当然不会做4字节对齐了
原帖由 mynets 于 2006-11-30 14:16 发表
哎,设计网络协议的牛人们早考虑到这些了,看看这个ip头,都是32位对齐了的,不用pack了。
访问奇地址的问题,是cpu如何从总线上取数据的问题了,跟程序没什么关系,它可能会一次取整个32位,然后把你需要的8位分 ...
原帖由 yg 于 2006-11-30 14:33 发表
你试过吗?
linux:
&a=0xbfeff3f0
&b=0xbfeff3f4
aix:
&a=2ff22950
&b=2ff22954
sco:
&a=7ffffa24
&b=7ffffa28
没看出有什么特别的
mov r3, #97
strb r3, [fp, #-19]
mov r3, #0
orr r3, r3, #12
strb r3, [fp, #-18]
mov r3, #0
strb r3, [fp, #-17]
mov r3, #0
strb r3, [fp, #-16]
mov r3, #0
strb r3, [fp, #-15]
mov r3, #0
orr r3, r3, #23
strb r3, [fp, #-14]
mov r3, #0
strb r3, [fp, #-13]
mov r3, #7
mov r0, r3
mov r3, #97
strb r3, [fp, #-24]
mov r3, #12
str r3, [fp, #-20]
mov r3, #23
mov r2, #0
strb r3, [fp, #-16]
strb r2, [fp, #-15]
mov r3, #12
mov r0, r3
mov r3, #97
strb r3, [fp, #-24]
mov r3, #12
str r3, [fp, #-20]
mov r3, #23
strh r3, [fp, #-16] @ movhi
mov r3, #12
mov r0, r3
movb $97, -24(%ebp)
movl $12, -23(%ebp)
movw $23, -19(%ebp)
movl $7, %eax
movb $97, -24(%ebp)
movl $12, -20(%ebp)
movw $23, -16(%ebp)
movl $12, %eax
原帖由 gvim 于 2006-11-30 15:12 发表
x86 上就相当直观
#pragma pack(1)
/* #pragma pack(1) */
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |