Avatar billede epod Nybegynder
10. april 2005 - 02:02 Der er 3 kommentarer

ASM til linux

Jeg vil gerne til at programmere asm - nasm til linux. Jeg har ikke programmeret særlig meget asm før hen, men nu skal det være. Jeg bruger Debian 2.6.8 og vil gerne bruge nasm elf til at compile med. Mit problem er at jeg ikke kan finde nogle tutorials der går videre end Hello world. Jeg har fundet MEGET lidt på: http://www.linuxassembly.org, men langt fra nok til at jeg kan bruge det til noget. Jeg vil ikke til at lære in-line asm eller gas, men det ser ud til at det er det eneste der er noget information om. Jeg håber rigtig meget der er nogen som kan give mig et brugbart link.

Mvh.
Brian Bak

Ps. Det jeg leder efter er noget der ligner dette:

section    .text
    global _start            ;must be declared for linker (ld)

msg    db    'Hello, world!',0xa    ;our dear string
len    equ    $ - msg            ;length of our dear string

_start:                    ;tell linker entry point

    mov    edx,len    ;message length
    mov    ecx,msg    ;message to write
    mov    ebx,1    ;file descriptor (stdout)
    mov    eax,4    ;system call number (sys_write)
    int    0x80    ;call kernel

    mov    eax,1    ;system call number (sys_exit)
    int    0x80    ;call kernel
Avatar billede arne_v Ekspert
10. april 2005 - 11:16 #1
Unix (og Linux) er traditionelt C. Meget lidt assembler. Og laver man
endelig assembler, så er det nok typisk gas og og ikke nasm.
Avatar billede arne_v Ekspert
10. april 2005 - 11:22 #2
Avatar billede epod Nybegynder
10. april 2005 - 16:12 #3
Det var et meget nyttigt link. Tak for det. Jeg har fundet ud af af kernel call numrene ligger i /usr/include/asm/unistd.h Det passer meget godt med at eax skal være 1 for at afslutte, men... Hvordan finder jeg ud af hvad ebx, ecx & edx skal være. Jeg mener når man skal skrive noget ud på skærmen skal eax være 4 for at skrive, ebx = 1 for stdout, ecx = strengen og edx længden på strengen. Men det er noget jeg har læst i Hello word eksemplet. Hvordan finder jeg ud af hvad ebx,ecx og edx skal være hvis eax = 12 for chdir eller 21 for mount? Findes der ikke en tabel over sådan noget?

Venilg hilsen
Brian Bak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester