Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

x86 Assembly Questions

Name: Anonymous 2014-04-26 23:52

$ cat bork.asm

section .data
fuck: dd 0xDEADBEEF

section .text
global _start
_start:
mov dword [fuck],0xABADC0DA

mov eax,1
mov ebx,0
int 0x80


Why doesn't writing to the .data segment segfault? Shouldn't Linux map it to a read-only page?

$ nasm -f elf bork.asm
$ gold -s -o bork-gold bork.asm
$ ld -s -melf_i386 -o bork-ld bork.o
$ du -bh *
432 bork-gold
132 bork.asm
340 bork-ld
608 bork.o


How does such a minimal binary take up 300+ bytes?

Name: Anonymous 2014-04-29 15:57

I did it! Prime number generator in assembly! WOW


#include <stdio.h>
int asm_main(void);
void print_number(int i) { printf("%d\n",i); fflush(stdout); }
int main(void) { return asm_main(); }



extern print_number
extern puts

section .data
msg db "LETS PRIMES.. 2",0

section .bss
prm: resd 1
num: resd 1
mem: resd 130000

section .text
global asm_main
asm_main:
enter 0,0
pusha

push ebp
mov ebp,esp
push msg
call puts
add esp,4
pop ebp

mov dword [num],0
mov dword [prm],3

.loop:
;; Here we put the prime we found
;; into the list of primes
mov eax,[prm]
inc dword [num]
mov ebx,[num]
mov [mem+4*ebx],eax

mov ebp,esp
push eax
call print_number
add esp,4

call next_prime
jmp .loop

popa
mov eax,0 ; return 0
leave
ret

next_prime:
add dword [prm],2

mov ebx,0
.loop:
inc ebx

mov eax,[prm]
mov ecx,[mem+4*ebx]
mov edx,0
div ecx ; eax/(ecx:edx)
cmp edx,0
je next_prime

cmp ebx,[num]
jne .loop

ret

Name: Anonymous 2014-04-29 19:07

>>45
But that's just C with some assembly used for hot loops. Surely you can do better.

Name: Anonymous 2014-04-29 20:11

>>46
I can't...

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List