about execute assembly exapmles under freebsd
Tetsuji "Maverick" Rai
maverick31337 at vfemail.net
Sun Apr 24 06:04:42 PDT 2005
I refined my code to make the binary shorter. Your code is in Linux
system call convention (ie, arguments are in eax,ebx,ecx...), however in
FreeBSD by default arguments must be pushed in the stack.
-----t.s-------------
.section .data
output:
.ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n"
.section .text
.globl _start
_start:
xor %eax, %eax
cpuid
mov $output, %edi # load address of output in edi
movl %ebx, 28(%edi)
movl %edx, 32(%edi)
movl %ecx, 36(%edi)
pushl $42
mov $output, %eax
pushl %eax
pushl $1
mov $4,%eax
push %eax
int $0x80
add $16,%esp # of course you can omit this
xor %eax,%eax # this is shorter than "pushl $0; pushl $1; mov
$1,%eax"
push %eax
inc %eax
push %eax
int $0x80
--------------t.s end----------
and it works like this:
---cut-----
freebsd53:~/tmp% as t.s -o t.o
freebsd53:~/tmp% ld t.o -o t
freebsd53:~/tmp% ./t
The processor Vendor ID is 'GenuineIntel'
---cut-----
HHCHANG wrote:
>Hi,
>I couldn't execute assembly example under freebsd .
>The environment and tools I used were (in IBM X31 box):
>1.
>bash-2.05b# uname -a
>FreeBSD sexbear.localhost 5.3-STABLE FreeBSD 5.3-STABLE #3: Sun Feb 20 21:55:06 UTC 2005 ?root at sexbear.localhost:/usr/obj/usr/src/sys/SEXBEAR??i386
>2.
>bash-2.05b# as -v
>GNU assembler version 2.15 [FreeBSD] 2004-05-23 (i386-obrien-freebsd) using BFD version 2.15 [FreeBSD] 2004-05-23
>
>bash-2.05b# ld -v
>GNU ld version 2.15 [FreeBSD] 2004-05-23
>
>3.(compile and execute the example)
>bash-2.05b#
> as -gstabs -o cpuid.o cpuid.s
> ld -o cpuid cpuid.o
> cpuid (no output after executing the program)
> gdb cpuid
> (gdb) run
> Starting program: /usr/local/src/code/chap04/cpuid
> Program exited with code 0340.
> (gdb) break *_start
> (gdb) run
> Program exited with code 0340.
>###################example in book###################################
>#cpuid.s Sample program to extract the processor Vendor ID
>.section .data
>output:
> .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n"
>.section .text
>.globl _start
>_start:
> movl $0, %eax
> cpuid
> movl $output, %edi
> movl %ebx, 28(%edi)
> movl %edx, 32(%edi)
> movl %ecx, 36(%edi)
> movl $4, %eax
> movl $1, %ebx
> movl $output, %ecx
> movl $42, %edx
> int $0x80
> movl $1,
> %eax
> movl $0, %ebx
> int $0x80
>
>###################example in book###################################
>
>I viewed the tutorial: http://www.int80h.org/bsdasm/.
>but I couldn't find any syntax error in the program.
>Could someone give me a hint where I could find the more information?
>Thanks~
>
>Regards,
>_______________________________________________
>freebsd-hackers at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
>To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>
>
>
--
Tetsuji 'Maverick' Rai
PGP Key fingerprint = 2021 6BF9 CEA3 73DE FF17 B326 F4DA F04E F784 3B85
gpg fingerprint
Aviation Jokes: http://www.geocities.com/tetsuji_rai/
Profile http://maverick.ns1.name/
http://maverick.IsASecret.com/
More information about the freebsd-hackers
mailing list