Σελίδα 1 από 1

Πως γράφουμε Assembly σε Ubuntu μέσω GCC και as

ΔημοσίευσηΔημοσιεύτηκε: 30 Ιαν 2012, 11:50
από simosx
Δείτε και Πως γράφουμε σε Assembly σε Ubuntu (NASM)

Το να γράψουμε Assembly από το μηδέν μπορεί να είναι δύσκολο. Εδώ θα δούμε πως μπορούμε να ξεκινήσουν από κώδικα C, να τον μετατρέψουμε σε Assembly, να κάνουμε τυχόν προσθήκες και να τον μεταγλωττίσουμε.

Έστω ότι έχουμε το πρόγραμμα helloworld.c σε C:
Κώδικας: Επιλογή όλων
#include <stdio.h>

int main(void)
{
    printf("Γεια σου Ubuntu-gr!");

    return 0;
}


Το μετατρέπουμε σε Assembly (τύπου «as», που είναι ο Assembler του GNU Compiler Collection, και διαφέρει σε σύνταξη από το nasm) με
Κώδικας: Επιλογή όλων
gcc -S helloworld.c


Παράγει το αρχείο helloworld.s,
Κώδικας: Επιλογή όλων
   .file   "helloworld.c"
   .section   .rodata
.LC0:
   .string   "\316\223\316\265\316\271\316\261 \317\203\316\277\317\205 Ubuntu-gr!"
   .text
.globl main
   .type   main, @function
main:
.LFB0:
   .cfi_startproc
   pushq   %rbp
   .cfi_def_cfa_offset 16
   movq   %rsp, %rbp
   .cfi_offset 6, -16
   .cfi_def_cfa_register 6
   movl   $.LC0, %eax
   movq   %rax, %rdi
   movl   $0, %eax
   call   printf
   movl   $0, %eax
   leave
   .cfi_def_cfa 7, 8
   ret
   .cfi_endproc
.LFE0:
   .size   main, .-main
   .ident   "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
   .section   .note.GNU-stack,"",@progbits


Εδώ μπορούμε να κάνουμε αλλαγές/προσθήκες κτλ. Πως μεταγλωττίζουμε ξανά;
Εκτελούμε
Κώδικας: Επιλογή όλων
as helloworld.s -o helloworld.o

όπου παράγει το helloworld.o, το ενδιάμεσο αρχείο με το λεγόμενο αντικειμενικό κώδικα (object code).

Και συνδέουμε (link) το helloworld.o με τις βιβλιοθήκες συστήματος με την εντολή (θα μπορούσαμε και με την «ld», ωστόσο θέλει πολλές παραμέτρους· δείτε το άρθρο αυτό)
Κώδικας: Επιλογή όλων
gcc helloworld.o -o helloworld

και εκτελούμε με
Κώδικας: Επιλογή όλων
$ ./helloworld
Γεια σου Ubuntu-gr!       

Re: Πως γράφουμε Assembly σε Ubuntu μέσω GCC και as

ΔημοσίευσηΔημοσιεύτηκε: 31 Ιαν 2012, 01:36
από pc_magas
Καλοοοοοο αν και ξέρω asm για MIPS και PIC16F84A

Re: Πως γράφουμε Assembly σε Ubuntu μέσω GCC και as

ΔημοσίευσηΔημοσιεύτηκε: 31 Ιαν 2012, 03:32
από Star_Light
Πολυ ενδιαφέρον θέμα. Καλή ιδέα σίμο ;) Μπορει καποιος να πάρει τις εντολές απο πάνω πχ

call , mov , push και να τις ψάξει. Ισως το κάνω αύριο αν έχω χρονο .

Η γνωμη μου ειναι πως πυρήνας εδω ειναι οι καταχωρητές (Data Registers) με μια γρηγορη και προχειρη αναζητηση βρήκα τα εξης :

http://www.botskool.com/tutorials/elect ... rogramming
http://www.botskool.com/tutorials/elect ... structions
http://www.compeng.dit.ie/staff/tscarff ... sters.html