Titre: ASM et Linux Posté par: Best Comp Iraq le 06 Juin 2014 à 13:21:43 Hello les NewbieContestiens,
Dans l'espoir d'avancer sur les épreuves de wargame je me suis dit qu'il était bon d'avoir des bonnes notions d'assembleur. J'aimerais bien pour ça pouvoir coder des petits scripts de test. Je suis sous Linux et j'ai installé nasm. Maintenant je n'arrive pas à trouver sur Google quel est le code source de base qui doit être implémenté. Par exemple pour le C on doit écrire un main. Est ce que c'est la même chose avec l'assembleur ? EDIT : j'ai vu que gcc -S test.c me traduisait test.c en assembleur. Seulement ce n'est pas la même manière de représenter les données que sous Ollydbg. Connaissez-vous un moyen d'y remédier ? Titre: Re : ASM et Linux Posté par: Xioth le 06 Juin 2014 à 14:24:15 Salut,
Moi j'ai utilisé ce tuto pour apprendre : http://www.tutorialspoint.com/assembly_programming/index.htm Je l'ai trouvé plutôt pas mal. Je pense que t'auras ce que tu cherches de-dans. Bye. Titre: Re : ASM et Linux Posté par: Ge0 le 06 Juin 2014 à 14:57:36 Citation Par exemple pour le C on doit écrire un main. Est ce que c'est la même chose avec l'assembleur ? Ca dépend. Si tu utilises gcc pour l'édition de liens, tu as effectivement intérêt à exporter un symbole "main". Si tu utilises ld, c'est _start qu'il te faudra exporter (comme sur le lien fourni par Xioth). Dans les deux cas tu as forcément un point d'entrée par lequel ton binaire commencera. Avec gcc tu auras également un _start, qui se contentera d'appeler main() par lui-même, avec les arguments qui vont bien (argc, **argv, **env...). Voici un Hello World à la printf, c'est-à-dire sans passer par les syscalls, et en liant notre code avec la libc, donc : Code: % cat helloworld_libc.asm C'est comme ça que tu écriras tes shellcodes, si tu décides de les faire toi-même ! :) Titre: Re : ASM et Linux Posté par: Best Comp Iraq le 07 Juin 2014 à 12:59:05 C'est normal que cela ne ressemble pas totalement à ce qu'il a sur Ollydbg ?
Titre: Re : ASM et Linux Posté par: benjani13 le 07 Juin 2014 à 13:22:16 Quelle différence?
Il y a une différence entre un programme complet (que tu écris et assemble), et un programme que tu décompile. Dans le cas d'un programme que tu écris tu as principalement deux syntaxes : Intel et AT&T (Intel étant celle que tu vois sous OllyDBG, AT&T la syntaxe par défaut sous Linux). Tu as as aussi d'autres syntaxes dérivées suivant l'assembleur que tu utilises (NASM, MASM, TASM). Dans le cas de la décompilation, suivant l'outil tu n'aura pas forcément les instructions "d'initialisation" comme les section, db, global, etc (probablement car tu ne regardes que le segment de code) et le code ne sera pas forcément exactement le même car tous les outils ne donnent pas forcément la même représentation. Et pour finir, sache que tous ça n'est valable que pour une architecture donnée! Un processeur x86 n'a pas le même langage d’assemblage (car pas le même jeu d'instruction) qu'un processeur ARM ou qu'un processeur Motorala. |