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

143

    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. Suureksi onneksesi on myönnettävä

      Että olen nyt sitten mennyt rakastumaan sinuun. Ei tässä mitään, olen kärsivällinen ❤️
      Ikävä
      65
      1453
    2. Perusmuotoiset TV-lähetykset loppu

      Nyt sanoo useiden HD-muotoistenkin kanavien kohdalla äly-TV, ettei kanava ole käytössä, haluatko poistaa sen? Kanavia
      Apua aloittelijalle
      110
      900
    3. No ei sun asunto eikä mikään

      muukaan sussa ole erikoista. 🤣 köyhä 🤣
      Ikävä
      58
      751
    4. YLE Äänekosken kaupunginjohtaja saa ankaraa arvostelua

      Kaupungin johtaja saa ankaraa kritiikkiä äkkiväärästä henkilöstöjohtamisestaan. Uusin häirintäilmoitus päivätty 15 kesä
      Äänekoski
      47
      744
    5. Mitä mietit Honey?

      Kulta nainen ❤️❤️
      Ikävä
      57
      720
    6. Missä kaikessa olet erilainen

      Kuin kaivattusi? Voin itse aloittaa: en ole vegaani kuten hän. Enkä harrasta tietokonepelejä lainkaan.
      Ikävä
      39
      697
    7. Hyvin. Ikävää nainen,

      Että vainoat ja stalkkaat miestäni.onko tarkoituksesi ehkä saada meidät eroamaan?no,siinä et tule onnistumaan
      Ikävä
      71
      671
    8. Linnasuolla poliisi operaatio

      Kamalaa menoa taas meidän ihanassa kaupungissa. https://www.uutisvuoksi.fi/paikalliset/8646060
      Imatra
      26
      669
    9. Katsoin mies itseäni rehellisesti peiliin

      Ja pakko on myöntää, että rupsahtanut olen 😆. Niin se ikä saavuttaa meidät kaikki.
      Ikävä
      41
      657
    10. Uskomaton tekninen vaaliliitto poimii rusinoita pullasta

      Korni näytösesitelmä menossa kaupunginvaltuustossa. Juhlia ei ole kokouksista tiedossa muilla, kuin monipuolue paikalli
      Pyhäjärvi
      67
      650
    Aihe