Yksinkertainen juttu varmasti mutta...

ex--pertti

C-kielellä:

#include

int main(void)
{
printf("Hello world!\n");
return 0;
}

Linux Assembly Tutorial:

section .data
hello: db 'Hello world!',10 ; 'Hello world!' plus a linefeed character
helloLen: equ $-hello ; Length of the 'Hello world!' string

section .text
global _start

_start:
mov eax,4 ; The system call for write (sys_write)
mov ebx,1 ; File descriptor 1 - standard output
mov ecx,hello ; Put the offset of hello in ecx
mov edx,helloLen ; helloLen is a constant, so we don't need to say
; mov edx,[helloLen] to get it's actual value
int 80h ; Call the kernel

mov eax,1 ; The system call for exit (sys_exit)
mov ebx,0 ; Exit with return code of 0 (no error)
int 80h

Mutta sitten taas gcc-kääntäjällä C-koodi kääntyy Assemblyksi? ihan eri tavalla

gcc -S hello.c

Saadaan seuraavanlaista koodia

.file "hello.c"
.section .rodata
.LC0:
.string "Hello world!"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $.LC0, %edi
call puts
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Debian 4.7.2-5) 4.7.2"
.section .note.GNU-stack,"",@progbits

Osaisiko joku selventää miksi GCC kääntää koodin ihan erilaiseksi, toinen koodinpätkä on toki kääntäjän tuottamaa itseään varten, mutta koodi on kuitenkin samalle käyttöjärjestelmälle ja arkkitehtuurille? Miksi se on noin erinäköistä? Tarviiko sen olla?

3

225

    Vastaukset 3

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Turhaako?

      Selitä ensin mihin tarvit tällaista tietoa.

      • ex--pertti

        Yritän opetella Linux Assemblyä ja GCC-kääntäjän toimintaa. Assembly Tutorial on ihan hyvä mutta jos C-kääntäjä ei tuota lähellekään samanlaista koodia niin olisi kiva tietää syy.


    • ex--pertti

      Vastaan itse itselleni, heh

      http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s3

      Jos jotakuta siis kiinnostaa tietää. GCC kääntää tuosta C-koodista AT&T syntaksia joka on melko erilaista verrattuna Intelin syntaksiin. En tiedä johtuuko siitä mutta GCC kääntäjällä ohjelman koko tulee olemaan 6,4K kun taas esim. NASM kääntää tuosta Intelin syntaksista ohjelman kooksi vain 456 bytesia, eli GCC tekee "samasta" ohjelmasta 14x suuremman.

      Onko tuohon mitään sanottavaa?

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Riikka Purra on mukana Suomen huutokauppakeisari -sarjassa

      Suomen huutokauppakeisari on tavallisten suomalaisten ohjelma. Sarjan suosiosta kertoo se, että nyt alkaa jo 19. kausi t
      Maailman menoa
      76
      971
    2. Kuuleppas

      ensimmäiset naissuhteet toimii miehelle eräänlaisena oppikouluna, mutta hän ei välttämättä itse ymmärrä oppineensa mitää
      Ikävä
      227
      823
    3. Paljonko on etäisyytesi kiinnostavaan naiseen km?

      Kaipailen tärkeää miestä ja pohdin hänen ajatuksiaan... ❤️
      Ikävä
      71
      791
    4. Mitä näät

      Siinä miehessä?
      Ikävä
      49
      664
    5. On meillä harvinaisen törkeä valtuuston puheenjohtaja

      Ja tyhmä! Kannattaisi googlettaa "julkisuuslaki" ja nojata siihen vasta sitten. Samalla voisi googlettaa muiden kuntien
      Kemijärvi
      60
      595
    6. Olet mieleni päällä edelleen, J

      En voi sille mitään. Ja olen yrittänyt voida, monen monta kertaa. Miten jäinkin näin kiinni sinuun... 😞
      Ikävä
      34
      554
    7. Mikko Leppilampi loi TTK:ssa ankaran tavan - Jatkaako Veronica Verho haastavaa perinnettä?

      Suorien lähetysten juontaminen vaatii rautaista ammattitaitoa ja kovaa työtä. Tanssii Tähtien Kanssa -ohjelmassa on näh
      Kotimaiset julkkisjuorut
      28
      538
    8. Olet aika julma minua kohtaan

      Antaisit vähän armoa.
      Ikävä
      46
      517
    9. Oletko miettinyt

      Mikä minusta tekee sinulle niin erityisen? Onko se samanlaiset lapsuusmaisemat? Työpaikan liian pitkät katseet? Selvittä
      Ikävä
      29
      509
    10. Olisitko valmis

      Siihen?
      Ikävä
      36
      502
    Aihe