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