(gdb) disas htons
Dump of assembler code for function ntohs:
0x00000037aa4e9470 <ntohs+0>: ror $0x8,%di
0x00000037aa4e9474 <ntohs+4>: movzwl %di,%eax
0x00000037aa4e9477 <ntohs+7>: retq
Run Code Online (Sandbox Code Playgroud)
这里做什么ror和movzwl做什么?
zwo*_*wol 10
ror代表"向右旋转",movzwl代表"移动,零延伸到长"(由于历史原因,一直追溯到8086,在所有x86文档中"单词"仅为16位).
所以:
ror $0x8, %di
Run Code Online (Sandbox Code Playgroud)
将寄存器中的16位值di(在x86-64上,包含函数的第一个整数参数)右移8位; 换句话说,交换它的高字节和低字节.这是实际完成工作的部分ntohs.
movzwl %di, %eax
Run Code Online (Sandbox Code Playgroud)
将16位值复制di到eax,将其零扩展为32位值.该指令是必需的,因为函数的整数返回值进入eax,如果它小于32位,则必须扩展到32位.
retq
Run Code Online (Sandbox Code Playgroud)
从功能返回.(这q只是你在x86-64上的线索.)
| 归档时间: |
|
| 查看次数: |
2912 次 |
| 最近记录: |