反汇编成masm格式就好了,as用intel语法也是可以支持的。
不清楚,但是把 mov eax, dword [ebp+0x8] # 055B _ 8B. 45, 08 mov dword [esp], eax # 055E _ 89. 04 24 call malloc 改成 mov eax, dword ptr [ebp+0x8] # 055B _ 8B. 45, 08 mov dword ptr [esp], eax # 055E _ 89. 04 24 call malloc 就好了。 看来as的语法识别有些奥妙,难道是把 dword [esp] 理解成 esp加一个dword的地址?
哎,我之前回复过呀,怎么不显示? cmp dword ptr [ebp-0x4], 0
可是还是会报错。写了个简单函数测试,先malloc,再memset成0。 这个是这个函数反汇编的结果。 push ebp mov %ebp, %esp sub esp, 40 # 0558 _ 83. EC, 28 mov eax, dword [ebp+0x8] # 055B _ 8B. 45, 08 mov dword [esp], eax # 055E _ 89. 04 24 call malloc # 0561 _ E8, FFFFFFFC(rel) mov dword [ebp-0x4], eax # 0566 _ 89. 45, FC cmp dword [ebp-0x4], 0 # 0569 _ 83. 7D, FC, 00 jz $_038 # 056D _ 74, 1A mov eax, dword [ebp+0x8] # 056F _ 8B. 45, 08 mov dword [esp+0x8], eax # 0572 _ 89. 44 24, 08 mov dword [esp+0x4], 0 # 0576 _ C7. 44 24, 04, 00000000 mov eax, dword [ebp-0x4] # 057E _ 8B. 45, FC mov dword [esp], eax # 0581 _ 89. 04 24 call memset # 0584 _ E8, FFFFFFFC(rel) $_038: mov eax, dword [ebp-0x4] # 0589 _ 8B. 45, FC leave # 058C _ C9 ret # 058D _ C3 然后再前后加上.intel_syntax noprefix 用as编译时得到: Error: ambiguous operand size for `cmp' ---- 是这行cmp dword [ebp-0x4], 0 # 0569 _ 83. 7D, FC, 00 Error: ambiguous operand size for `mov' ------这行mov eax, dword [ebp+0x8] # 056F _ 8B. 45, 08
21,459
社区成员
41,601
社区内容
加载中
试试用AI创作助手写篇文章吧