作者lungswu (啊啊啊啊啊啊啊啊啊啊啊)
看板ASM
标题Re: [问题] 请问一下有关Ubuntu下的MIPS
时间Thu Mar 27 22:13:36 2008
※ 引述《xinu (xinu)》之铭言:
: 标题: Re: [问题] 请问一下有关Ubuntu下的MIPS
: 时间: Thu Mar 27 01:39:27 2008
:
: ※ 引述《bizkit (有点期待)》之铭言:
: : ※ 引述《king19880326 (OK的啦~我都可以接受)》之铭言:
: : : 我是使用Ubuntu7.10的作业系统
: : : 想试试不同写法的c code编译成MIPS有什麽不同
: : : 请问我该怎麽样得到编译後的MIPS assembly code呢@@?
: : : 谢谢大家<(_ _)>
: : google: cross compilation
: : http://www.speedblue.org/cross_compilation/
: 除了cross compile以外, 要看组合语言还要
: objdump反组译
: 以arm来看就是arm-linux-objdump -xDSl [executable]
: 就可以看到用x86和arm在每一个source code编译成assembly有什麽不同
:
: 记得把-O设成不optimize可以清楚一点...应该是-O0
: 对了, 忘了说在gcc编译要加-g
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 218.168.158.36
: ※ 编辑: xinu 来自: 218.168.158.36 (03/27 01:40)
: 推 loveflames:想m起来,如果能再详细一点说明会更好 03/27 01:47
详细一点,举个例子(在cygwin下):
========= source code ==================
$ cat hello.c
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
return 0;
}
========= compiler option ================
$ gcc -g hello.c -o hello
========= objdunp 看反组译结果 ============
$ objdump.exe -xDS hello.exe
hello.exe: file format pei-i386
hello.exe
architecture: i386, flags 0x0000013a:
EXEC_P, HAS_DEBUG, HAS_SYMS, HAS_LOCALS, D_PAGED
start address 0x00401000
Characteristics 0x107
........ <省略,以下是main func反组译之後> .........
int main(void)
{
401050: 55 push %ebp
401051: 89 e5 mov %esp,%ebp
401053: 83 ec 08 sub $0x8,%esp
401056: 83 e4 f0 and $0xfffffff0,%esp
401059: b8 00 00 00 00 mov $0x0,%eax
40105e: 83 c0 0f add $0xf,%eax
401061: 83 c0 0f add $0xf,%eax
401064: c1 e8 04 shr $0x4,%eax
401067: c1 e0 04 shl $0x4,%eax
40106a: 89 45 fc mov %eax,0xfffffffc(%ebp)
40106d: 8b 45 fc mov 0xfffffffc(%ebp),%eax
401070: e8 1b 00 00 00 call 401090 <___chkstk>
401075: e8 a6 00 00 00 call 401120 <___main>
printf("Hello World\n");
40107a: c7 04 24 00 20 40 00 movl $0x402000,(%esp)
401081: e8 aa 00 00 00 call 401130 <_printf>
return 0;
401086: b8 00 00 00 00 mov $0x0,%eax
}
40108b: c9 leave
40108c: c3 ret
40108d: 90 nop
40108e: 90 nop
40108f: 90 nop
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.70.105.11