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

199

    Vastaukset

    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. Päivän Riikka: polttoöljyn hinta räjähti

      Näyttää tuo putinismi ilmenevän persuissa myös Suomen yrittäjien kampittamisena. Polttoöljy on se katalyytti, joka pitää
      Maailman menoa
      42
      2210
    2. Mökkejä ostellaan nyt ihan hulluna!

      Tyypilliset lainamäärät on yli 500 000€ mökkejä ostellessa eli erityisesti tuollaiset miljoonamökit on nyt suomalaisten
      Maailman menoa
      65
      2078
    3. Helsingin yllä valopalloja

      https://www.iltalehti.fi/kotimaa/a/1508be00-28c9-4156-83dc-0be5e7aa3066 "Helsingin taivaalla lensi lauantaina puolen yön
      Sinkut
      121
      1940
    4. HÄLYYTYS!!

      Ukraina se hyökkää jo Suomen maaperälle. https://www.iltalehti.fi/kotimaa/a/645b83ce-e074-4f00-8b99-245d01b38a36
      NATO
      392
      1696
    5. Kovasti on hävittäjiä ilmassa. Nytkö se alkoi?

      Onko nyt sota ?? `Vai harjoituksiako vain? Hävittäjät pörrää kovasti.
      Kouvola
      104
      1655
    6. Helsingin yllä lensi yöllä jotain outoa puolen yön aikaan valopalloja

      Poliisi on saanut tapauksesta yhden havaintoilmoituksen. Valopalloja oli noin parikymmentä ILtalehdessä on video tapah
      Maailman menoa
      124
      1484
    7. Millainen on naisellinen nainen

      Nyt kun taas mennään keikkuen kesään, niin millainen nainen on naisellinen? Pukeutuminen, olemus, puhetapa, jne. Vilma n
      Sinkut
      182
      1102
    8. Raamatullinen kaste

      Seurakunnassamme kastettiin mm eräs muslimi, joka oli tullut uskoon. Hän oli ollut Suomessa viitisen vuotta. Hän oli lu
      Kaste
      53
      967
    9. Mitkä asiat kaivatun ajattelussa

      Ihmetyttävät? Mikä on tullut yllätyksenä?
      Ikävä
      75
      935
    10. Mitkä olisivat kolme tärkeintä

      vihjettä kaivatustasi?
      Ikävä
      27
      899
    Aihe