c语言 大端小端作用,汇编和c语言中的大端小端问题

摘要:关于c语言和汇编语言中所涉及的大端序和小端序的一个记录

说明

可以简单的认为winhex打开的文件开头只要没特殊说明都是以小端序的形式排列的,特殊说明比如开头是FEFF就说明这个文件是大端序。

memcpy(buffer,buf,sizeof(buf))时buf在buffer中的排列顺序

2df2d428bfc85b891a1bf47fb7d630fd.png

图中为winxp下将buf数组复制到buffer数组的汇编调试,rep moovs为memcpy的核心代码,功能就是将地址DS:SI中的buf数组复制到地址ES:DI的buffer数组中去。复制时是从buf[0]复制到buffer[0]中即地址从低向高复制,也就是buffer数组会从栈的低地址向栈的高地址延伸。

c语言数组的数据压栈顺序

7b511eccb35f7faa3b0ba841bd2f96f4.png

可以看到调用test函数时,buf数组参数的进栈顺序是从数组的高地址开始。

int13中断读取磁盘数据时数据在寄存器中的顺序

4323efe07547703199b3962633eac128.png

使用winhex可以看到磁盘中的数据文件是以EB3C开头的(小端序),然后int 13读取这个文件,发现在寄存器是大端序

push 0x1234在寄存器中的排列顺序

28b479c2c2d8e73bfdd48b1752acc7dd.png

push 0x12345678的压栈顺序

5e0273cd5437846477c384205329f85d.png

push 0x12345678编译成二进制exe文件后的排列顺序

d317a85ac7c203b6e4c0760fedc4b318.png

ac4738b3df227e8a586387552426a4dc.png

push 字符串的压栈顺序

129bf98fc342d898f2d50d7d85039986.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值