main函式的gcc彙編解析

2021-04-22 02:50:40 字數 1588 閱讀 6382

原檔案:count.c

int main()

編譯命令:(gcc version 4.1.2 20070925) gcc -s count.c

彙編碼如下

.file "count.c"

.text

.globl main

.type main, @function

main:

leal 4(%esp), %ecx

進入main例程時最後乙個入棧的就是返回位址,也即

esp+4=返回位址 所以返回位址在[ecx-4]之中

andl $-16, %esp //

為了16

位元組對齊

?? pushl -4(%ecx) //??

pushl %ebp

push stack base pointer onto the stack

movl %esp, %ebp

move the stack pointer into the base pointer

pushl %ecx //??

subl $16, %esp

get 16 bytes of stack

memstarting at

ebp movl $0, -8(%ebp)

move 0 into address

ebp8 (j)

.movl $0, -12(%ebp)

move 0 into address

ebp12 (i)

.jmp .l2

.l3:

movl -12(%ebp), %eax

move

iinto

eax.

addl %eax, -8(%ebp)

j=j+i

.addl $1, -12(%ebp) i= i+1

.l2:

cmpl $7, -12(%ebp)

this instruction compares the value of ito

7.jle .l3

jump to label

.l3if 12

(%ebp)

is less than or equal to 7.

movl $0, %eax

set the return code in

eax addl $16, %esp

popl %ecx

popl %ebp

leal -4(%ecx), %esp

ret.size main, .-main

.ident "gcc: (gnu) 4.1.2 20070925 (red hat 4.1.2-27)"

.section .note.gnu-stack,"",@progbits

main函式的引數解析

main函式的引數解析 我們平常寫main函式的時候習慣不帶引數,將其預設為void.但如果我們仔細觀察的話,我們就能發現其實main函式是有引數的。接下來,我們就來了解一下main函式的引數列表。首先main函式的原型為 int main int argc,char argv char envp ...

main函式的引數解析

我們一般寫 的時候都會這樣寫main函式 int main 所以剛開始我們都以為main函式是沒有引數的,然而事實卻不是這樣子的。首先,我們來看看main函式的原型 int main int argc,char argv,char envp 所以main函式是有引數的,而且有三個引數。第乙個引數 a...

C的main函式解析

終於開始學習linux的c語言程式設計了嚶嚶嚶,有種終於入門的感動 關於linux中c語言程式設計包括vim gcc makefile這些工具的用法這些不是本次的主題,我在這裡就不詳細展開了,本文只闡述一下main函式的引數呼叫問題。virtualbox 6.1.12,ubuntu 20.04,co...