I spent the last three days reading through all the archives.
And I have no clue what I am doing wrong. I only started down
this road because of some of the other posters. I figured I
would give assembly a shot.
I read Assembly Step by Step, which is really geared toward
DOS and linux, but it's a pretty good overview.
>From what I have read of the history, openBSD went from aout
to ELF around 3.0 with the addition of some extra information.
I am guessing that my problem is related to doing something
wrong with the amd64. But I'm not sure what to read next.
I did go through the first hundred pages of the amd programmers
guide on the amd website.
I am assembling and linking:
as -o test1.o test1.s
ld -o test1 test1.o
file type reads as:
test1: ELF 64-bit LSB executable, AMD64, version 1, for OpenBSD, statically
linked, not stripped
so it's set as OpenBSD.
And readelf gives me:
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x400218
Start of program headers: 64 (bytes into file)
Start of section headers: 664 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 4
Size of section headers: 64 (bytes)
Number of section headers: 10
Section header string table index: 7
Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .text PROGBITS 0000000000400218 00000218
0000000000000015 0000000000000000 AX 0 0 4
[ 2] .data PROGBITS 0000000000600230 00000230
000000000000000d 0000000000000000 WA 0 0 4
[ 3] .gotpad0 PROGBITS 000000000070023d 00000240
0000000000000000 0000000000000000 W 0 0 1
[ 4] .gotpad1 PROGBITS 000000000070023d 00000240
0000000000000000 0000000000000000 W 0 0 1
[ 5] .bss NOBITS 0000000000800240 00000240
0000000000000000 0000000000000000 WA 0 0 4
[ 6] .note.openbsd.ide NOTE 0000000000400200 00000200
0000000000000018 0000000000000000 A 0 0 4
[ 7] .shstrtab STRTAB 0000000000000000 00000240
0000000000000052 0000000000000000 0 0 1
[ 8] .symtab SYMTAB 0000000000000000 00000518
00000000000001b0 0000000000000018 9 c 8
[ 9] .strtab STRTAB 0000000000000000 000006c8
000000000000003e 0000000000000000 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x000000000000022d 0x000000000000022d R E 100000
LOAD 0x0000000000000230 0x0000000000600230 0x0000000000600230
0x000000000000000d 0x000000000000000d RW 100000
LOAD 0x0000000000000240 0x0000000000800240 0x0000000000800240
0x0000000000000000 0x0000000000000000 RW 100000
NOTE 0x0000000000000200 0x0000000000400200 0x0000000000400200
0x0000000000000018 0x0000000000000018 R 4
Section to Segment mapping:
Segment Sections...
00 .text .note.openbsd.ident
01 .data
02
03 .note.openbsd.ident
There is no dynamic segment in this file.
There are no relocations in this file.
Here is my current code:
.section ".note.openbsd.ident", "a"
.p2align 2
.long 8
.long 4
.long 1
.ascii "OpenBSD\0"
.long 0
.p2align 2
.section .data
msg: .asciz "hello world\n"
len = . - msg - 1
.section .text
.global _start
_start:
push $len
push $msg
push $1
movb $4, %al
push %rax
int $0x80
push $0
movb $1, %al
push %rax
int $0x80
Any links or man pages to read would be helpful? I have all ready info as, and
it's pretty old, but it's still useful.
When I type in test1, the program appears to just exit, but nothing is printed
to STDOUT.
Thanks,
Brian
____________________________________________________
Start your day with Yahoo! - make it your home page
http://www.yahoo.com/r/hs