汇编和c语言中的大端小端问题
摘要:关于c语言和汇编语言中所涉及的大端序和小端序的一个记录
说明
可以简单的认为winhex打开的文件开头只要没特殊说明都是以小端序的形式排列的,特殊说明比如开头是FEFF就说明这个文件是大端序。
memcpy(buffer,buf,sizeof(buf))时buf在buffer中的排列顺序
图中为winxp下将buf数组复制到buffer数组的汇编调试,rep moovs为memcpy的核心代码,功能就是将地址DS:SI中的buf数组复制到地址ES:DI的buffer数组中去。复制时是从buf[0]复制到buffer[0]中即地址从低向高复制,也就是buffer数组会从栈的低地址向栈的高地址延伸。
c语言数组的数据压栈顺序
可以看到调用test函数时,buf数组参数的进栈顺序是从数组的高地址开始。
int13中断读取磁盘数据时数据在寄存器中的顺序
使用winhex可以看到磁盘中的数据文件是以EB3C开头的(小端序),然后int 13读取这个文件,发现在寄存器是大端序
push 0x1234在寄存器中的排列顺序
push 0x12345678的压栈顺序
push 0x12345678编译成二进制exe文件后的排列顺序
push 字符串的压栈顺序
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。