about execute assembly exapmles under freebsd

Maslan maslanbsd at gmail.com
Mon Apr 25 03:39:07 PDT 2005


hey if u need u to use linux calling way u will need to brandelf the
executable (if it's elf)


On 4/24/05, Tetsuji Maverick Rai <maverick31337 at vfemail.net> wrote:
> 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/
> 
> _______________________________________________
> 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"
> 


-- 
I'm Searching For Perfection,
So Even If U Need Portability U've To Use Assembly ;-)
http://www.maslanlab.org


More information about the freebsd-hackers mailing list