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. Jos SDP ei voita reilusti, persut kumoavat demokratian Suomesta

      Näin tekisi ainakin Rydman seuratessaan idolinsa Trumpin mallia https://www.is.fi/politiikka/art-2000012187244.html
      Maailman menoa
      589
      1420
    2. Anteeksi arkuuteni

      Olen säälittävä, mitä tulee sinun kohtaamiseen. Tunnen vaan itseni todella epävarmaksi sun kanssa. Jos minun olisi pitän
      Ikävä
      43
      777
    3. Perussuomalaisten kannatus nousi rytinällä Ylen tänään julkaisemassa tuoreimmassa gallup-kyselyssä.

      https://yle.fi/a/74-20239449 Perussuomalaisilla hurja- ja ylivoimaisesti suurin nousu tässä uudessa Ylen gallupissa. Kyl
      Maailman menoa
      470
      680
    4. Kuka melkein täysi-ikäinen hukkui?

      Poliisin mukaan nuori oli lähes täysi-ikäinen. Ennen iltakuutta tulleen ilmoituksen mukaan ihminen oli joutunut mahdoll
      Iisalmi
      5
      539
    5. Mikä on ollut

      Söpöintä välillämme?
      Ikävä
      34
      519
    6. Tykkäätköhän vielä minusta?

      Yhtä paljon, kuin minä sinusta? Haaveissa ollaan kahdestaan, rauhassa ja lähennytään fyysisesti ja tutustutaan syvemmin
      Ikävä
      28
      494
    7. Olet ihana

      Muru, sä oot ihana. Tunsitko sen sähkön meidän välillä kun oltiin ihan låhekkäin? 👩‍❤️‍👩❤️😼😘
      Ikävä
      37
      480
    8. kenen näköinen

      kaivattusi on ?
      Ikävä
      39
      477
    9. Vihervasemmistofeministinaisasianaiset

      Tulevat tänne palstalle haukkumaan miehiä ja naljailemaan miehelle, kehuvat olevansa heitä parempia. Itse asuvat MIEHE
      Sinkut
      151
      438
    10. Hyvännäköinen pakkaus

      Olet hyvännäköinen pakkaus nainen.
      Ikävä
      22
      432
    Aihe