μετατροπή κώδικα απο C σε Assemply

συζητήσεις για assembly

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από soteres2002 » 04 Φεβ 2010 23:12

Κώδικας: Επιλογή όλων

        .file   "c.c"
        .text
.globl foo
        .type   foo, @function
foo:
        pushl   %ebp
        movl    %esp, %ebp
        popl    %ebp
        ret
        .size   foo, .-foo
.globl main
        .type   main, @function
main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $16, %esp
        movl    $10, -8(%ebp)
        cmpl    $0, -8(%ebp)
        je      .L4
        cmpl    $1, -8(%ebp)
        jne     .L6
.L4:
        call    foo
.L6:
        movl    $1, %eax
        addl    $16, %esp
        popl    %ecx
        popl    %ebp
        leal    -4(%ecx), %esp
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)"
        .section        .note.GNU-stack,"",@progbits

Κώδικας: Επιλογή όλων

#include <stdio.h>

void foo&#40;&#41; &#123;

&#125;

int main&#40;&#41; &#123;
  int z = 10;
  if&#40;z == 0 || z == 1&#41; &#123;
    foo&#40;&#41;;
  &#125;

  return 1;
&#125;


tommai
Δημοσιεύσεις: 73
Εγγραφή: 18 Ιαν 2008 03:46

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από tommai » 04 Φεβ 2010 23:26

soteres2002 έγραψε:

Κώδικας: Επιλογή όλων

        .file   "c.c"
        .text
.globl foo
        .type   foo, @function
foo&#58;
        pushl   %ebp
        movl    %esp, %ebp
        popl    %ebp
        ret
        .size   foo, .-foo
.globl main
        .type   main, @function
main&#58;
        leal    4&#40;%esp&#41;, %ecx
        andl    $-16, %esp
        pushl   -4&#40;%ecx&#41;
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $16, %esp
        movl    $10, -8&#40;%ebp&#41;
        cmpl    $0, -8&#40;%ebp&#41;
        je      .L4
        cmpl    $1, -8&#40;%ebp&#41;
        jne     .L6
.L4&#58;
        call    foo
.L6&#58;
        movl    $1, %eax
        addl    $16, %esp
        popl    %ecx
        popl    %ebp
        leal    -4&#40;%ecx&#41;, %esp
        ret
        .size   main, .-main
        .ident  "GCC&#58; &#40;GNU&#41; 4.1.2 20061115 &#40;prerelease&#41; &#40;Debian 4.1.1-21&#41;"
        .section        .note.GNU-stack,"",@progbits

Κώδικας: Επιλογή όλων

#include <stdio.h>

void foo&#40;&#41; &#123;

&#125;

int main&#40;&#41; &#123;
  int z = 10;
  if&#40;z == 0 || z == 1&#41; &#123;
    foo&#40;&#41;;
  &#125;

  return 1;
&#125;

μου φαίνεται αρκετά περίπλοκο όλο αυτο....

Κώδικας: Επιλογή όλων

if &#40; z|0 & z<3 &#41;
&#123;
"compound statement"
&#125;
για 4-5 σειρές κώδικα C
να βγεί ένα κατεβατό assemply.......

δηλ.... μπορούσα τωρα εγω να βγάλω αυτόν τον κώδικα μόνος........
κάτι ποιο απλό δεν υπάρχει??

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από soteres2002 » 04 Φεβ 2010 23:54

ναι, βασικά ίσως δεν εξήγησα σωστά. Αυτό το κατεβατό είναι για όλο το κατεβατό του C κώδικα, και μέσα σε αυτό το dump έχει και το snippet με το if.

tommai
Δημοσιεύσεις: 73
Εγγραφή: 18 Ιαν 2008 03:46

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από tommai » 05 Φεβ 2010 00:07

ο κώδικας που ψάχνω είναι από την main και μετά

main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $16, %esp
movl $10, -8(%ebp)
cmpl $0, -8(%ebp)
je .L4
cmpl $1, -8(%ebp)
jne .L6

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από soteres2002 » 05 Φεβ 2010 03:44

yup, ακριβώς! :P κοίταξε τα cmp lines...

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από LightForce » 05 Φεβ 2010 12:22

tommai έγραψε:
μου φαίνεται αρκετά περίπλοκο όλο αυτο....
για 4-5 σειρές κώδικα C
να βγεί ένα κατεβατό assemply.......

δηλ.... μπορούσα τωρα εγω να βγάλω αυτόν τον κώδικα μόνος........
κάτι ποιο απλό δεν υπάρχει??
Δεν είναι περίπλοκο tommai, απλώς οι γνώσεις σου σε Assembly είναι ακόμα περιορισμένες.
Κατεβατό 20 γραμμές? Θα μπορούσε και 1 γραμμή C κώδικα να μεταφράζεται σε πολλές γραμμές Assembly.
Γράψε πολλά δικά σου προγράμματα μελετώντας το σετ εντολών του επεξεργαστή προτού αρχίζεις να διαβάζεις τον κώδικα που εξάγει o compiler.

Κώδικας: Επιλογή όλων

	if &#40; z|0 & z<3 &#41;
	&#123;
	"compound statement"
	&#125;

Κώδικας: Επιλογή όλων

		mov eax, &#91;z&#93;
		mov ecx, 3
		cmp eax, ecx
		mov eax, 0
		setl al
		and eax, 0
		or ecx, eax
		test ecx, ecx
		jne @F			
			; statement			
	@@&#58;
		ret
Θα χρειαστείς ένα καλό βιβλίο.

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από soteres2002 » 05 Φεβ 2010 20:08

padws to na eisai arxarios kai na mathaineis assembly me "reverse-engineering"-oriented texnikes, einai san na diabazeis ena biblio apo to telos pros tin arxi... evge tommai!

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από soteres2002 » 05 Φεβ 2010 22:18

tommai έγραψε: τι να κάνω και εγώ soteres2002...με ρίξανε απευθείας στα βαθιά...
έτσι... έτσιιι! αλλά με φροντίδα, ε; Μη ξεχνάς... :lol:

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από LightForce » 05 Φεβ 2010 22:32

soteres2002 έγραψε:padws to na eisai arxarios kai na mathaineis assembly me "reverse-engineering"-oriented texnikes, einai san na diabazeis ena biblio apo to telos pros tin arxi... evge tommai!
Χεχε, πολύ σωστά.
Aλλά πρίν ξεκινήσεις να διαβάζεις το βιβλίο είτε απο την αρχή είτε απο το τέλος, πρέπει να μάθεις την γλώσσα που είναι γραμμένο.

tommai έγραψε: LightForce ήταν ακρυβώς αυτό που έψαχνα!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ευχαριστώ........

Εσύ έβγαλες τον κώδικα με πρόγραμμα η απο την εμπειρία σου?
Παρακαλώ.
Είναι ο κώδικας που υπάρχει στο πρώτο post μου σε αυτό το topic.
Χαίρομαι που βοήθησα, εμπειρία ιδιαίτερη δεν έχω σε ASM.


p.s έκανα χαζό και έσβησα κατά λάθος ένα post του tommai νομίζω.
sorry παιδιά, κρατάω αγκαλιά τον μπέμπη και προσπαθώ να γράψω στο keyboard.

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

μετατροπή κώδικα απο C σε Assemply

Δημοσίευση από soteres2002 » 06 Φεβ 2010 00:55

LightForce έγραψε:
soteres2002 έγραψε:padws to na eisai arxarios kai na mathaineis assembly me "reverse-engineering"-oriented texnikes, einai san na diabazeis ena biblio apo to telos pros tin arxi... evge tommai!
Χεχε, πολύ σωστά.
Aλλά πρίν ξεκινήσεις να διαβάζεις το βιβλίο είτε απο την αρχή είτε απο το τέλος, πρέπει να μάθεις την γλώσσα που είναι γραμμένο.
akrivos!! :wink: einai ligo gia anthropous poy vionoun dejavu katastaseis, alla den kanei kako na to dokimasei kaneis... :kaloe:

Απάντηση

Επιστροφή στο “Assembly”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες