65,210
社区成员
发帖
与我相关
我的任务
分享 .file "test.cpp"
.section .text$_ZN4test4funcEiii,"x"
.linkonce discard
.align 2
.globl __ZN4test4funcEiii
.def __ZN4test4funcEiii; .scl 2; .type 32; .endef
__ZN4test4funcEiii:
pushl %ebp
movl %esp, %ebp
movl 16(%ebp), %eax
addl 12(%ebp), %eax
addl 20(%ebp), %eax
popl %ebp
ret
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "%d\12\0"
.text
.align 2
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $36, %esp
call ___main
movl $3, 12(%esp)
movl $2, 8(%esp)
movl $1, 4(%esp)
leal -9(%ebp), %eax
movl %eax, (%esp)
call __ZN4test4funcEiii ;这里调用的,直接在栈上传递了参数.
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
movl %eax, 4(%esp)
movl $LC0, (%esp)
call _printf
movl $0, %eax
addl $36, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.def _printf; .scl 2; .type 32; .endef
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
CONST SEGMENT
$SG3846 DB '%d', 0aH, 00H
CONST ENDS
PUBLIC ?func@test@@QAEHHHH@Z ; test::func
PUBLIC _main
EXTRN _printf:PROC
; Function compile flags: /Odtp
; File c:\documents and settings\hwp\桌面\test.cpp
_TEXT SEGMENT
_c$ = -8 ; size = 4
_x$ = -1 ; size = 1
_main PROC
; 21 : {
push ebp
mov ebp, esp
sub esp, 8
; 22 : test x;
; 23 : int c = x.func( 1,2,3);
push 3
push 2
push 1
lea ecx, DWORD PTR _x$[ebp]
call ?func@test@@QAEHHHH@Z ; test::func 这不就是call么
mov DWORD PTR _c$[ebp], eax
; 24 : printf("%d\n",c);
mov eax, DWORD PTR _c$[ebp]
push eax
push OFFSET $SG3846
call _printf
add esp, 8
; 25 : return 0;
xor eax, eax
; 26 : }
mov esp, ebp
pop ebp
ret 0
_main ENDP
; Function compile flags: /Odtp
_TEXT ENDS
; COMDAT ?func@test@@QAEHHHH@Z
_TEXT SEGMENT
_this$ = -4 ; size = 4
_a$ = 8 ; size = 4
_b$ = 12 ; size = 4
_c$ = 16 ; size = 4
?func@test@@QAEHHHH@Z PROC ; test::func, COMDAT
; _this$ = ecx
; 15 : {
push ebp
mov ebp, esp
push ecx
mov DWORD PTR _this$[ebp], ecx
; 16 : return a+b+c;
mov eax, DWORD PTR _a$[ebp]
add eax, DWORD PTR _b$[ebp]
add eax, DWORD PTR _c$[ebp]
; 17 : }
mov esp, ebp
pop ebp
ret 12 ; 0000000cH
?func@test@@QAEHHHH@Z ENDP ; test::func
_TEXT ENDS
END