c语言反编译汇编,怎么把C语言转换成汇编

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

tin658

推荐于 2017.09.15

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:53%    等级:7

已帮助:310人

.file"Untitled1.c"

.text

.globl_factor

.def_factor;.scl2;.type32;.endef

_factor:

pushl%ebp

movl%esp, %ebp

pushl%edi

pushl%esi

pushl%ebx

subl$28, %esp

cmpl$1, 8(%ebp)

jneL2

movl$1, %eax

movl$0, %edx

jmpL3

L2:

movl8(%ebp), %eax

subl$1, %eax

movl%eax, (%esp)

call_factor

movl8(%ebp), %ecx

movl%ecx, %ebx

sarl$31, %ebx

movl%edx, %edi

imull%ecx, %edi

movl%ebx, %esi

imull%eax, %esi

addl%edi, %esi

mull%ecx

leal(%esi,%edx), %ecx

movl%ecx, %edx

L3:

addl$28, %esp

popl%ebx

popl%esi

popl%edi

popl%ebp

ret

.globl_get_numerator

.def_get_numerator;.scl2;.type32;.endef

_get_numerator:

pushl%ebp

movl%esp, %ebp

subl$40, %esp

movl8(%ebp), %eax

movl%eax, -16(%ebp)

movl12(%ebp), %eax

movl%eax, -12(%ebp)

fildl16(%ebp)

fstpl8(%esp)

fldl-16(%ebp)

fstpl(%esp)

call_pow

leave

ret

.globl_get_denominator

.def_get_denominator;.scl2;.type32;.endef

_get_denominator:

pushl%ebp

movl%esp, %ebp

subl$24, %esp

movl8(%ebp), %eax

movl%eax, (%esp)

call_factor

movl%eax, -16(%ebp)

movl%edx, -12(%ebp)

fildq-16(%ebp)

leave

ret

.globl_get_symbol

.def_get_symbol;.scl2;.type32;.endef

_get_symbol:

pushl%ebp

movl%esp, %ebp

movl8(%ebp), %eax

andl$1, %eax

testl%eax, %eax

jneL9

movl$1, %eax

jmpL10

L9:

movl$-1, %eax

L10:

popl%ebp

ret

.def___main;.scl2;.type32;.endef

.section .rdata,"dr"

LC2:

.ascii "please input the x:\0"

LC3:

.ascii "%lf\0"

LC6:

.ascii "sin(%lf)=%lf\12\0"

.text

.globl_main

.def_main;.scl2;.type32;.endef

_main:

pushl%ebp

movl%esp, %ebp

andl$-16, %esp

subl$96, %esp

call___main

fldz

fstpl80(%esp)

fldz

fstpl72(%esp)

movl$LC2, (%esp)

call_puts

leal56(%esp), %eax

movl%eax, 4(%esp)

movl$LC3, (%esp)

call_scanf

fldl56(%esp)

fldlLC4

fmulp%st, %st(1)

fldlLC5

fdivrp%st, %st(1)

fstpl64(%esp)

movl$0, 92(%esp)

jmpL12

L13:

fldl80(%esp)

fstpl72(%esp)

movl92(%esp), %eax

addl%eax, %eax

addl$1, %eax

movl%eax, 8(%esp)

fldl64(%esp)

fstpl(%esp)

call_get_numerator

fstpl32(%esp)

movl92(%esp), %eax

addl%eax, %eax

addl$1, %eax

movl%eax, (%esp)

call_get_denominator

fdivrl32(%esp)

fstpl32(%esp)

movl92(%esp), %eax

movl%eax, (%esp)

call_get_symbol

movl%eax, 44(%esp)

fildl44(%esp)

fmull32(%esp)

fldl80(%esp)

faddp%st, %st(1)

fstpl80(%esp)

addl$1, 92(%esp)

L12:

cmpl$3, 92(%esp)

jleL13

fldl56(%esp)

fldl80(%esp)

fstpl12(%esp)

fstpl4(%esp)

movl$LC6, (%esp)

call_printf

movl$0, %eax

leave

ret

.section .rdata,"dr"

.align 8

LC4:

.long-266631570

.long1075388921

.align 8

LC5:

.long0

.long1081507840

.ident"GCC: (tdm-2) 4.8.1"

.def_pow;.scl2;.type32;.endef

.def_puts;.scl2;.type32;.endef

.def_scanf;.scl2;.type32;.endef

.def_printf;.scl2;.type32;.endef追问: 这是什么编译器转出来的吗

追答:gcc 4.8.1 生成的。

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值