Contribute  :  Web Resources  :  Past Polls  :  Site Statistics  :  Downloads  :  Forum  
    BiW ReversingThe challenge is yours    
 Welcome to BiW Reversing
 Tuesday, July 22 2014 @ 03:21 PM CEST

Inline Assembly On GCC using Intel Syntax

   

CodingLevel : newbie

OS : linux
Language : C and inline ASM (GCC)

INTRODUCTION

those who started out coding assemly programs in windows and masm and then
started using msvc or bcc would find it almost a head ache to code
an inline assembly in gcc or even use the native as (gnu assembler)
because gcc natively uses AT&T syntax while windowers are accustomed to Intel Syntax


i now show you how to inline in gcc with intel_syntax directly embedded
this is a small Hello World Program that is coded in Assembly Using int 0x80

the code in c is as follows

#include <stdio>
#include <string.h>
char inlined[] = "this is a message from intel syntaxed inlined assembly code\n";
int len;
int main (void)
{
printf("this is a sample intel syntaxed and inlined c program\n");
len = strlen(inlined);
printf("%d\n",len);
asm(".intel_syntax noprefix\n");
asm("mov edx,len\n");
asm("mov ecx,offset inlined\n");
asm("mov ebx,1\n");
asm("mov eax,4\n");
asm("int 0x80\n");
printf("probably it is a success look in gdb\n");
return 1;

notice the first line :

asm(".intel_syntax noprefix\n");
This denotes that the folowing assembly snippet uses intel syntax to the
native assembler gas
now compile this with the following command line
gcc -o intelinlined -masm=intel intelinlined.c

notice the switch -masm=intel
that is all you need to do to inline with intel syntax in gcc
hope this was usefull enough
now lets try running the above code and see if it works

someone@server:~/myfirst/myfirstasm> ./intelinlined
this is a sample intel syntaxed and inlined c program
60
this is a message from intel syntaxed inlined assembly code
probably it is a success look in gdb
someone@server:~/myfirst/myfirstasm>
ok it works beautifully lets confirm the disassembly here i use hte a pretty good hexeditor that even does xrefs etc

  ....... ! ;********************************************************                             
  ....... ! main:                           ;xref o80482c7                                        
  ....... !   push        ebp                                                                     
  804836d !   mov         ebp, esp                                                                
  804836f !   sub         esp, 8                                                                  
  8048372 !   and         esp, 0fffffff0h                                                         
  8048375 !   mov         eax, 0                                                                  
  804837a !   sub         esp, eax                                                                
  804837c !   sub         esp, 0ch                                                                
  804837f !   push        strz_this_is_a_sample_intel_syntax_8048520                              
  8048384 !   call        printf@@GLIBC_2.0                                                       
  8048389 !   add         esp, 10h                                                                
  804838c !   sub         esp, 0ch                                                                
  804838f !   push        inlined                                                                 
  8048394 !   call        strlen@@GLIBC_2.0                                                       
  8048399 !   add         esp, 10h                                                                
  804839c !   mov         [len], eax                                                              
  80483a1 !   sub         esp, 8                                                                  
  80483a4 !   push        dword ptr [len]                                                         
  80483aa !   push        data_8048557                                                            
  80483af !   call        printf@@GLIBC_2.0                                                       
  80483b4 !   add         esp, 10h                                                                
  80483b7 !   mov         edx, [len]                                                              
  80483bd !   mov         ecx, inlined                                                            
  80483c2 !   mov         ebx, 1                                                                  
  80483c7 !   mov         eax, 4                                                                  
  80483cc !   int         80h                                                                     
  80483ce !   sub         esp, 0ch                                                                
  80483d1 !   push        strz_probably_it_is_a_success_look_8048560                              
  80483d6 !   call        printf@@GLIBC_2.0                                                       
  80483db !   add         esp, 10h                                                                
  80483de !   mov         eax, 1                                                                  
  80483e3 !   leave                                                                               
  80483e4 !   ret                            

looks nice

Find the sourcecode here

thanks to detten for his server usage
also thanks to Zach Dwiel who posted a snippet for this in game dev
http://www.gamedev.net/reference/articles/article1987.asp
hope you find it use full

stingduk




What's Related

Story Options

Inline Assembly On GCC using Intel Syntax | 3 comments | Create New Account
The following comments are owned by whomever posted them. This site is not responsible for what they say.
Inline Assembly On GCC using Intel Syntax
Authored by: moniker on Sunday, December 04 2005 @ 12:09 PM CET
great help tnx, never got around reading that manpage..

now lets see if i can use extended instructions :)
Inline Assembly On GCC using Intel Syntax
Authored by: stingduk on Sunday, December 04 2005 @ 04:28 PM CET
the n is not just n i had used an escape sequence for
new line which was backslash n
a forced line feed is neceesery at the end of each line to avoid misinterpretation
but this board software has stripped that back slash

i dont know if detten could fix that problem
ill try mailing detten the source and precompiled binary so that it would be easier to follow the
article
thanks for the comment
 Copyright © 2014 BiW Reversing
 All trademarks and copyrights on this page are owned by their respective owners.
Powered By Geeklog 
Created this page in 0.08 seconds