Closed Thread
Results 1 to 10 of 10

Thread: C and Assembly in Linux 64 Bit Platform

  1. #1
    birinight's Avatar
    birinight is offline Learning Programmer
    Join Date
    Oct 2007
    Location
    Here
    Posts
    36
    Rep Power
    0

    C and Assembly in Linux 64 Bit Platform

    Hi. I am trying to link C an assembly on a 64 Bit Platform.

    I'm using gcc 4.3.2 and nasm 2.03.01

    The problem is that I don't know what it must be done to preserve any registers on a 64 bit platform.

    I'm doing a benchmark program for linux to test the different configurations and Unix compilations that I have.

    In a 32 Bits platform is seems to be easy.

    You call:
    Code:
    push ebp
    mov ebp, esp
    at the beginning and

    Code:
    pop ebp
    before returning.

    As you all know "push ebp" and "pop ebp" no longer exists in a 64 bit pure environment. The registers are extended to 64 bits and "push ebp" becomes "push rbp"

    It seams logic that the same procedures apply and the program will work if replace 32 bit variables by 64 bit variables

    Here's a sample of the 32 Bit program
    It's a simple program tha makes 0xFFFFFFFF loops with the loopnz instruction. The objective is to measure the time between the start and the end.

    Code:
    extern void loop_cicle();
    /*bech.c*/
    int main()
    {
    	
    	loop_cicle();
    
    	return 0;
    }
    
    -------------------------------
    
    ;bench.asm
    segment .text
    	global loop_cicle
    	global _start
    	
    _start:
    loop_cicle:
    	push ebp
    	mov ebp, esp
    	
            mov ecx, 0xFFFFFFFF
    		
    ciclo:	
    	loopnz ciclo
    	pop ebp
    	
    	ret
    The version of 64 Bits:

    Code:
    extern void loop_cicle();
    /*bech.c*/
    int main()
    {
    	
    	loop_cicle();
    
    	return 0;
    }
    
    -------------------------------
    
    ;bench.asm
    segment .text
    	global loop_cicle
    	global _start
    	
    _start:
    loop_cicle:
    	push rbp
    	mov rbp, esp
    	
            mov rcx, 0xFFFFFFFF
    		
    ciclo:	
    	loopnz ciclo
    	pop rbp
    	
    	ret
    Compilling:
    Code:
    gcc -c -o bench.c.o bench.c
    nasm -f elf64 -o bench.asm.o bench.asm
    ld -o bench bech.c.o bench.asm.o
    When the program runs it give's me a segmentation fault after the loop execution. It runs the loop.

    What am I doing wrong?

    Thanks in advance.

  2. CODECALL Circuit advertisement
    Join Date
    Always
    Location
    Advertising world
    Posts
    Many

     
  3. #2
    TkTech's Avatar
    TkTech is offline The Crazy One
    Join Date
    Jun 2006
    Location
    Canada
    Posts
    1,412
    Blog Entries
    1
    Rep Power
    31

    Re: C and Assemly in Linux 64 Bit Platform

    I haven't used long mode at all really, but that code looks correct.
    push stack pointer, set the value for the loop, decrement loop until zero, restore stack pointer, return. Your segment registers might be getting poisoned, try pushing them all onto the stack and restoring them before you return.

  4. #3
    birinight's Avatar
    birinight is offline Learning Programmer
    Join Date
    Oct 2007
    Location
    Here
    Posts
    36
    Rep Power
    0

    Re: C and Assemly in Linux 64 Bit Platform

    Quote Originally Posted by TkTech View Post
    I haven't used long mode at all really, but that code looks correct.
    push stack pointer, set the value for the loop, decrement loop until zero, restore stack pointer, return. Your segment registers might be getting poisoned, try pushing them all onto the stack and restoring them before you return.
    Thanks, but I can't do that in long mode.

    QUOTE From Intel Programming Book
    In 64-bit mode, segmentation is generally (but not completely) disabled, creating a
    flat 64-bit linear-address space. The processor treats the segment base of CS, DS,
    ES, SS as zero, creating a linear address that is equal to the effective address. The
    exceptions are the FS and GS segments, whose segment registers (which hold the
    segment base) can be used as additional base registers in some linear address calcu-
    lations.
    I've tried to push and pop FS and GS, but the problem persists.

  5. #4
    TkTech's Avatar
    TkTech is offline The Crazy One
    Join Date
    Jun 2006
    Location
    Canada
    Posts
    1,412
    Blog Entries
    1
    Rep Power
    31

    Re: C and Assemly in Linux 64 Bit Platform

    Hmm, can you compile your program and provide the generated assembly?

  6. #5
    birinight's Avatar
    birinight is offline Learning Programmer
    Join Date
    Oct 2007
    Location
    Here
    Posts
    36
    Rep Power
    0

    Re: C and Assemly in Linux 64 Bit Platform

    Code:
    00000000  7F45              jg 0x47
    00000002  4C                db 0x4C
    00000003  460201            add r8b,[rcx]
    00000006  0100              add [rax],eax
    00000008  0000              add [rax],al
    0000000A  0000              add [rax],al
    0000000C  0000              add [rax],al
    0000000E  0000              add [rax],al
    00000010  0200              add al,[rax]
    00000012  3E0001            add [ds:rcx],al
    00000015  0000              add [rax],al
    00000017  00F0              add al,dh
    00000019  004000            add [rax+0x0],al
    0000001C  0000              add [rax],al
    0000001E  0000              add [rax],al
    00000020  400000            add [rax],al
    00000023  0000              add [rax],al
    00000025  0000              add [rax],al
    00000027  00E0              add al,ah
    00000029  0100              add [rax],eax
    0000002B  0000              add [rax],al
    0000002D  0000              add [rax],al
    0000002F  0000              add [rax],al
    00000031  0000              add [rax],al
    00000033  004000            add [rax+0x0],al
    00000036  3800              cmp [rax],al
    00000038  0300              add eax,[rax]
    0000003A  400008            add [rax],cl
    0000003D  000500010000      add [rel 0x143],al
    00000043  000500000000      add [rel 0x49],al
    00000049  0000              add [rax],al
    0000004B  0000              add [rax],al
    0000004D  0000              add [rax],al
    0000004F  0000              add [rax],al
    00000051  004000            add [rax+0x0],al
    00000054  0000              add [rax],al
    00000056  0000              add [rax],al
    00000058  0000              add [rax],al
    0000005A  400000            add [rax],al
    0000005D  0000              add [rax],al
    0000005F  005801            add [rax+0x1],bl
    00000062  0000              add [rax],al
    00000064  0000              add [rax],al
    00000066  0000              add [rax],al
    00000068  58                pop rax
    00000069  0100              add [rax],eax
    0000006B  0000              add [rax],al
    0000006D  0000              add [rax],al
    0000006F  0000              add [rax],al
    00000071  0020              add [rax],ah
    00000073  0000              add [rax],al
    00000075  0000              add [rax],al
    00000077  0001              add [rcx],al
    00000079  0000              add [rax],al
    0000007B  0006              add [rsi],al
    0000007D  0000              add [rax],al
    0000007F  005801            add [rax+0x1],bl
    00000082  0000              add [rax],al
    00000084  0000              add [rax],al
    00000086  0000              add [rax],al
    00000088  58                pop rax
    00000089  016000            add [rax+0x0],esp
    0000008C  0000              add [rax],al
    0000008E  0000              add [rax],al
    00000090  58                pop rax
    00000091  016000            add [rax+0x0],esp
    00000094  0000              add [rax],al
    00000096  0000              add [rax],al
    00000098  0800              or [rax],al
    0000009A  0000              add [rax],al
    0000009C  0000              add [rax],al
    0000009E  0000              add [rax],al
    000000A0  0800              or [rax],al
    000000A2  0000              add [rax],al
    000000A4  0000              add [rax],al
    000000A6  0000              add [rax],al
    000000A8  0000              add [rax],al
    000000AA  2000              and [rax],al
    000000AC  0000              add [rax],al
    000000AE  0000              add [rax],al
    000000B0  51                push rcx
    000000B1  E574              in eax,0x74
    000000B3  64                db 0x64
    000000B4  07                db 0x07
    000000B5  0000              add [rax],al
    000000B7  0000              add [rax],al
    000000B9  0000              add [rax],al
    000000BB  0000              add [rax],al
    000000BD  0000              add [rax],al
    000000BF  0000              add [rax],al
    000000C1  0000              add [rax],al
    000000C3  0000              add [rax],al
    000000C5  0000              add [rax],al
    000000C7  0000              add [rax],al
    000000C9  0000              add [rax],al
    000000CB  0000              add [rax],al
    000000CD  0000              add [rax],al
    000000CF  0000              add [rax],al
    000000D1  0000              add [rax],al
    000000D3  0000              add [rax],al
    000000D5  0000              add [rax],al
    000000D7  0000              add [rax],al
    000000D9  0000              add [rax],al
    000000DB  0000              add [rax],al
    000000DD  0000              add [rax],al
    000000DF  0008              add [rax],cl
    000000E1  0000              add [rax],al
    000000E3  0000              add [rax],al
    000000E5  0000              add [rax],al
    000000E7  0000              add [rax],al
    000000E9  0000              add [rax],al
    000000EB  0000              add [rax],al
    000000ED  0000              add [rax],al
    000000EF  005548            add [rbp+0x48],dl
    000000F2  89E5              mov ebp,esp
    000000F4  48B9FFFFFFFF0000  mov rcx,0xffffffff
             -0000
    000000FE  E0FE              loopne 0xfe
    00000100  5D                pop rbp
    00000101  C3                ret
    00000102  90                nop
    00000103  90                nop
    00000104  55                push rbp
    00000105  4889E5            mov rbp,rsp
    00000108  B800000000        mov eax,0x0
    0000010D  E8DEFFFFFF        call dword 0xf0
    00000112  B800000000        mov eax,0x0
    00000117  C9                leave
    00000118  C3                ret
    00000119  0000              add [rax],al
    0000011B  0000              add [rax],al
    0000011D  0000              add [rax],al
    0000011F  001400            add [rax+rax],dl
    00000122  0000              add [rax],al
    00000124  0000              add [rax],al
    00000126  0000              add [rax],al
    00000128  017A52            add [rdx+0x52],edi
    0000012B  0001              add [rcx],al
    0000012D  7810              js 0x13f
    0000012F  0103              add [rbx],eax
    00000131  0C07              or al,0x7
    00000133  08900100001C      or [rax+0x1c000001],dl
    00000139  0000              add [rax],al
    0000013B  001C00            add [rax+rax],bl
    0000013E  0000              add [rax],al
    00000140  0401              add al,0x1
    00000142  40001500000000    add [rel 0x149],dl
    00000149  41                db 0x41
    0000014A  0E                db 0x0E
    0000014B  108602430D06      adc [rsi+0x60d4302],al
    00000151  0000              add [rax],al
    00000153  0000              add [rax],al
    00000155  0000              add [rax],al
    00000157  005175            add [rcx+0x75],dl
    0000015A  61                db 0x61
    0000015B  6E                outsb
    0000015C  746F              jz 0x1cd
    0000015E  210A              and [rdx],ecx
    00000160  00546865          add [rax+rbp*2+0x65],dl
    00000164  204E65            and [rsi+0x65],cl
    00000167  7477              jz 0x1e0
    00000169  6964652041737365  imul esp,[rbp+0x20],dword 0x65737341
    00000171  6D                insd
    00000172  62                db 0x62
    00000173  6C                insb
    00000174  657220            gs jc 0x197
    00000177  322E              xor ch,[rsi]
    00000179  3033              xor [rbx],dh
    0000017B  2E3031            xor [cs:rcx],dh
    0000017E  0000              add [rax],al
    00000180  47                db 0x47
    00000181  43                db 0x43
    00000182  433A20            cmp spl,[r8]
    00000185  285562            sub [rbp+0x62],dl
    00000188  756E              jnz 0x1f8
    0000018A  7475              jz 0x201
    0000018C  20342E            and [rsi+rbp],dh
    0000018F  332E              xor ebp,[rsi]
    00000191  322D31756275      xor ch,[rel 0x756276c8]
    00000197  6E                outsb
    00000198  7475              jz 0x20f
    0000019A  3131              xor [rcx],esi
    0000019C  2920              sub [rax],esp
    0000019E  342E              xor al,0x2e
    000001A0  332E              xor ebp,[rsi]
    000001A2  3200              xor al,[rax]
    000001A4  002E              add [rsi],ch
    000001A6  7379              jnc 0x221
    000001A8  6D                insd
    000001A9  7461              jz 0x20c
    000001AB  62                db 0x62
    000001AC  002E              add [rsi],ch
    000001AE  7374              jnc 0x224
    000001B0  7274              jc 0x226
    000001B2  61                db 0x61
    000001B3  62                db 0x62
    000001B4  002E              add [rsi],ch
    000001B6  7368              jnc 0x220
    000001B8  7374              jnc 0x22e
    000001BA  7274              jc 0x230
    000001BC  61                db 0x61
    000001BD  62                db 0x62
    000001BE  002E              add [rsi],ch
    000001C0  7465              jz 0x227
    000001C2  7874              js 0x238
    000001C4  002E              add [rsi],ch
    000001C6  65                db 0x65
    000001C7  68                db 0x68
    000001C8  5F                pop rdi
    000001C9  667261            o16 jc 0x22d
    000001CC  6D                insd
    000001CD  65002E            add [gs:rsi],ch
    000001D0  64                db 0x64
    000001D1  61                db 0x61
    000001D2  7461              jz 0x235
    000001D4  002E              add [rsi],ch
    000001D6  63                db 0x63
    000001D7  6F                outsd
    000001D8  6D                insd
    000001D9  6D                insd
    000001DA  656E              gs outsb
    000001DC  7400              jz 0x1de
    000001DE  0000              add [rax],al
    000001E0  0000              add [rax],al
    000001E2  0000              add [rax],al
    000001E4  0000              add [rax],al
    000001E6  0000              add [rax],al
    000001E8  0000              add [rax],al
    000001EA  0000              add [rax],al
    000001EC  0000              add [rax],al
    000001EE  0000              add [rax],al
    000001F0  0000              add [rax],al
    000001F2  0000              add [rax],al
    000001F4  0000              add [rax],al
    000001F6  0000              add [rax],al
    000001F8  0000              add [rax],al
    000001FA  0000              add [rax],al
    000001FC  0000              add [rax],al
    000001FE  0000              add [rax],al
    00000200  0000              add [rax],al
    00000202  0000              add [rax],al
    00000204  0000              add [rax],al
    00000206  0000              add [rax],al
    00000208  0000              add [rax],al
    0000020A  0000              add [rax],al
    0000020C  0000              add [rax],al
    0000020E  0000              add [rax],al
    00000210  0000              add [rax],al
    00000212  0000              add [rax],al
    00000214  0000              add [rax],al
    00000216  0000              add [rax],al
    00000218  0000              add [rax],al
    0000021A  0000              add [rax],al
    0000021C  0000              add [rax],al
    0000021E  0000              add [rax],al
    00000220  1B00              sbb eax,[rax]
    00000222  0000              add [rax],al
    00000224  0100              add [rax],eax
    00000226  0000              add [rax],al
    00000228  06                db 0x06
    00000229  0000              add [rax],al
    0000022B  0000              add [rax],al
    0000022D  0000              add [rax],al
    0000022F  00F0              add al,dh
    00000231  004000            add [rax+0x0],al
    00000234  0000              add [rax],al
    00000236  0000              add [rax],al
    00000238  F00000            lock add [rax],al
    0000023B  0000              add [rax],al
    0000023D  0000              add [rax],al
    0000023F  0029              add [rcx],ch
    00000241  0000              add [rax],al
    00000243  0000              add [rax],al
    00000245  0000              add [rax],al
    00000247  0000              add [rax],al
    00000249  0000              add [rax],al
    0000024B  0000              add [rax],al
    0000024D  0000              add [rax],al
    0000024F  0010              add [rax],dl
    00000251  0000              add [rax],al
    00000253  0000              add [rax],al
    00000255  0000              add [rax],al
    00000257  0000              add [rax],al
    00000259  0000              add [rax],al
    0000025B  0000              add [rax],al
    0000025D  0000              add [rax],al
    0000025F  0021              add [rcx],ah
    00000261  0000              add [rax],al
    00000263  0001              add [rcx],al
    00000265  0000              add [rax],al
    00000267  0002              add [rdx],al
    00000269  0000              add [rax],al
    0000026B  0000              add [rax],al
    0000026D  0000              add [rax],al
    0000026F  0020              add [rax],ah
    00000271  014000            add [rax+0x0],eax
    00000274  0000              add [rax],al
    00000276  0000              add [rax],al
    00000278  2001              and [rcx],al
    0000027A  0000              add [rax],al
    0000027C  0000              add [rax],al
    0000027E  0000              add [rax],al
    00000280  3800              cmp [rax],al
    00000282  0000              add [rax],al
    00000284  0000              add [rax],al
    00000286  0000              add [rax],al
    00000288  0000              add [rax],al
    0000028A  0000              add [rax],al
    0000028C  0000              add [rax],al
    0000028E  0000              add [rax],al
    00000290  0800              or [rax],al
    00000292  0000              add [rax],al
    00000294  0000              add [rax],al
    00000296  0000              add [rax],al
    00000298  0000              add [rax],al
    0000029A  0000              add [rax],al
    0000029C  0000              add [rax],al
    0000029E  0000              add [rax],al
    000002A0  2B00              sub eax,[rax]
    000002A2  0000              add [rax],al
    000002A4  0100              add [rax],eax
    000002A6  0000              add [rax],al
    000002A8  0300              add eax,[rax]
    000002AA  0000              add [rax],al
    000002AC  0000              add [rax],al
    000002AE  0000              add [rax],al
    000002B0  58                pop rax
    000002B1  016000            add [rax+0x0],esp
    000002B4  0000              add [rax],al
    000002B6  0000              add [rax],al
    000002B8  58                pop rax
    000002B9  0100              add [rax],eax
    000002BB  0000              add [rax],al
    000002BD  0000              add [rax],al
    000002BF  0008              add [rax],cl
    000002C1  0000              add [rax],al
    000002C3  0000              add [rax],al
    000002C5  0000              add [rax],al
    000002C7  0000              add [rax],al
    000002C9  0000              add [rax],al
    000002CB  0000              add [rax],al
    000002CD  0000              add [rax],al
    000002CF  000400            add [rax+rax],al
    000002D2  0000              add [rax],al
    000002D4  0000              add [rax],al
    000002D6  0000              add [rax],al
    000002D8  0000              add [rax],al
    000002DA  0000              add [rax],al
    000002DC  0000              add [rax],al
    000002DE  0000              add [rax],al
    000002E0  3100              xor [rax],eax
    000002E2  0000              add [rax],al
    000002E4  0100              add [rax],eax
    000002E6  0000              add [rax],al
    000002E8  0000              add [rax],al
    000002EA  0000              add [rax],al
    000002EC  0000              add [rax],al
    000002EE  0000              add [rax],al
    000002F0  0000              add [rax],al
    000002F2  0000              add [rax],al
    000002F4  0000              add [rax],al
    000002F6  0000              add [rax],al
    000002F8  60                db 0x60
    000002F9  0100              add [rax],eax
    000002FB  0000              add [rax],al
    000002FD  0000              add [rax],al
    000002FF  00440000          add [rax+rax+0x0],al
    00000303  0000              add [rax],al
    00000305  0000              add [rax],al
    00000307  0000              add [rax],al
    00000309  0000              add [rax],al
    0000030B  0000              add [rax],al
    0000030D  0000              add [rax],al
    0000030F  0001              add [rcx],al
    00000311  0000              add [rax],al
    00000313  0000              add [rax],al
    00000315  0000              add [rax],al
    00000317  0000              add [rax],al
    00000319  0000              add [rax],al
    0000031B  0000              add [rax],al
    0000031D  0000              add [rax],al
    0000031F  0011              add [rcx],dl
    00000321  0000              add [rax],al
    00000323  0003              add [rbx],al
    00000325  0000              add [rax],al
    00000327  0000              add [rax],al
    00000329  0000              add [rax],al
    0000032B  0000              add [rax],al
    0000032D  0000              add [rax],al
    0000032F  0000              add [rax],al
    00000331  0000              add [rax],al
    00000333  0000              add [rax],al
    00000335  0000              add [rax],al
    00000337  00A40100000000    add [rcx+rax+0x0],ah
    0000033E  0000              add [rax],al
    00000340  3A00              cmp al,[rax]
    00000342  0000              add [rax],al
    00000344  0000              add [rax],al
    00000346  0000              add [rax],al
    00000348  0000              add [rax],al
    0000034A  0000              add [rax],al
    0000034C  0000              add [rax],al
    0000034E  0000              add [rax],al
    00000350  0100              add [rax],eax
    00000352  0000              add [rax],al
    00000354  0000              add [rax],al
    00000356  0000              add [rax],al
    00000358  0000              add [rax],al
    0000035A  0000              add [rax],al
    0000035C  0000              add [rax],al
    0000035E  0000              add [rax],al
    00000360  0100              add [rax],eax
    00000362  0000              add [rax],al
    00000364  0200              add al,[rax]
    00000366  0000              add [rax],al
    00000368  0000              add [rax],al
    0000036A  0000              add [rax],al
    0000036C  0000              add [rax],al
    0000036E  0000              add [rax],al
    00000370  0000              add [rax],al
    00000372  0000              add [rax],al
    00000374  0000              add [rax],al
    00000376  0000              add [rax],al
    00000378  E003              loopne 0x37d
    0000037A  0000              add [rax],al
    0000037C  0000              add [rax],al
    0000037E  0000              add [rax],al
    00000380  68                db 0x68
    00000381  0100              add [rax],eax
    00000383  0000              add [rax],al
    00000385  0000              add [rax],al
    00000387  0007              add [rdi],al
    00000389  0000              add [rax],al
    0000038B  0009              add [rcx],cl
    0000038D  0000              add [rax],al
    0000038F  0008              add [rax],cl
    00000391  0000              add [rax],al
    00000393  0000              add [rax],al
    00000395  0000              add [rax],al
    00000397  0018              add [rax],bl
    00000399  0000              add [rax],al
    0000039B  0000              add [rax],al
    0000039D  0000              add [rax],al
    0000039F  0009              add [rcx],cl
    000003A1  0000              add [rax],al
    000003A3  0003              add [rbx],al
    000003A5  0000              add [rax],al
    000003A7  0000              add [rax],al
    000003A9  0000              add [rax],al
    000003AB  0000              add [rax],al
    000003AD  0000              add [rax],al
    000003AF  0000              add [rax],al
    000003B1  0000              add [rax],al
    000003B3  0000              add [rax],al
    000003B5  0000              add [rax],al
    000003B7  004805            add [rax+0x5],cl
    000003BA  0000              add [rax],al
    000003BC  0000              add [rax],al
    000003BE  0000              add [rax],al
    000003C0  4B0000            o64 add [r8],al
    000003C3  0000              add [rax],al
    000003C5  0000              add [rax],al
    000003C7  0000              add [rax],al
    000003C9  0000              add [rax],al
    000003CB  0000              add [rax],al
    000003CD  0000              add [rax],al
    000003CF  0001              add [rcx],al
    000003D1  0000              add [rax],al
    000003D3  0000              add [rax],al
    000003D5  0000              add [rax],al
    000003D7  0000              add [rax],al
    000003D9  0000              add [rax],al
    000003DB  0000              add [rax],al
    000003DD  0000              add [rax],al
    000003DF  0000              add [rax],al
    000003E1  0000              add [rax],al
    000003E3  0000              add [rax],al
    000003E5  0000              add [rax],al
    000003E7  0000              add [rax],al
    000003E9  0000              add [rax],al
    000003EB  0000              add [rax],al
    000003ED  0000              add [rax],al
    000003EF  0000              add [rax],al
    000003F1  0000              add [rax],al
    000003F3  0000              add [rax],al
    000003F5  0000              add [rax],al
    000003F7  0000              add [rax],al
    000003F9  0000              add [rax],al
    000003FB  0003              add [rbx],al
    000003FD  0001              add [rcx],al
    000003FF  00F0              add al,dh
    00000401  004000            add [rax+0x0],al
    00000404  0000              add [rax],al
    00000406  0000              add [rax],al
    00000408  0000              add [rax],al
    0000040A  0000              add [rax],al
    0000040C  0000              add [rax],al
    0000040E  0000              add [rax],al
    00000410  0000              add [rax],al
    00000412  0000              add [rax],al
    00000414  0300              add eax,[rax]
    00000416  0200              add al,[rax]
    00000418  2001              and [rcx],al
    0000041A  400000            add [rax],al
    0000041D  0000              add [rax],al
    0000041F  0000              add [rax],al
    00000421  0000              add [rax],al
    00000423  0000              add [rax],al
    00000425  0000              add [rax],al
    00000427  0000              add [rax],al
    00000429  0000              add [rax],al
    0000042B  0003              add [rbx],al
    0000042D  0003              add [rbx],al
    0000042F  005801            add [rax+0x1],bl
    00000432  60                db 0x60
    00000433  0000              add [rax],al
    00000435  0000              add [rax],al
    00000437  0000              add [rax],al
    00000439  0000              add [rax],al
    0000043B  0000              add [rax],al
    0000043D  0000              add [rax],al
    0000043F  0000              add [rax],al
    00000441  0000              add [rax],al
    00000443  0003              add [rbx],al
    00000445  000400            add [rax+rax],al
    00000448  0000              add [rax],al
    0000044A  0000              add [rax],al
    0000044C  0000              add [rax],al
    0000044E  0000              add [rax],al
    00000450  0000              add [rax],al
    00000452  0000              add [rax],al
    00000454  0000              add [rax],al
    00000456  0000              add [rax],al
    00000458  0100              add [rax],eax
    0000045A  0000              add [rax],al
    0000045C  0400              add al,0x0
    0000045E  F1                int1
    0000045F  FF00              inc dword [rax]
    00000461  0000              add [rax],al
    00000463  0000              add [rax],al
    00000465  0000              add [rax],al
    00000467  0000              add [rax],al
    00000469  0000              add [rax],al
    0000046B  0000              add [rax],al
    0000046D  0000              add [rax],al
    0000046F  000A              add [rdx],cl
    00000471  0000              add [rax],al
    00000473  0000              add [rax],al
    00000475  0003              add [rbx],al
    00000477  005801            add [rax+0x1],bl
    0000047A  60                db 0x60
    0000047B  0000              add [rax],al
    0000047D  0000              add [rax],al
    0000047F  0000              add [rax],al
    00000481  0000              add [rax],al
    00000483  0000              add [rax],al
    00000485  0000              add [rax],al
    00000487  000E              add [rsi],cl
    00000489  0000              add [rax],al
    0000048B  0000              add [rax],al
    0000048D  0001              add [rcx],al
    0000048F  00FE              add dh,bh
    00000491  004000            add [rax+0x0],al
    00000494  0000              add [rax],al
    00000496  0000              add [rax],al
    00000498  0000              add [rax],al
    0000049A  0000              add [rax],al
    0000049C  0000              add [rax],al
    0000049E  0000              add [rax],al
    000004A0  1400              adc al,0x0
    000004A2  0000              add [rax],al
    000004A4  0400              add al,0x0
    000004A6  F1                int1
    000004A7  FF00              inc dword [rax]
    000004A9  0000              add [rax],al
    000004AB  0000              add [rax],al
    000004AD  0000              add [rax],al
    000004AF  0000              add [rax],al
    000004B1  0000              add [rax],al
    000004B3  0000              add [rax],al
    000004B5  0000              add [rax],al
    000004B7  001C00            add [rax+rax],bl
    000004BA  0000              add [rax],al
    000004BC  1000              adc [rax],al
    000004BE  0100              add [rax],eax
    000004C0  F0004000          lock add [rax+0x0],al
    000004C4  0000              add [rax],al
    000004C6  0000              add [rax],al
    000004C8  0000              add [rax],al
    000004CA  0000              add [rax],al
    000004CC  0000              add [rax],al
    000004CE  0000              add [rax],al
    000004D0  2300              and eax,[rax]
    000004D2  0000              add [rax],al
    000004D4  1000              adc [rax],al
    000004D6  0100              add [rax],eax
    000004D8  F0004000          lock add [rax+0x0],al
    000004DC  0000              add [rax],al
    000004DE  0000              add [rax],al
    000004E0  0000              add [rax],al
    000004E2  0000              add [rax],al
    000004E4  0000              add [rax],al
    000004E6  0000              add [rax],al
    000004E8  2E0000            add [cs:rax],al
    000004EB  0010              add [rax],dl
    000004ED  00F1              add cl,dh
    000004EF  FF                db 0xFF
    000004F0  60                db 0x60
    000004F1  016000            add [rax+0x0],esp
    000004F4  0000              add [rax],al
    000004F6  0000              add [rax],al
    000004F8  0000              add [rax],al
    000004FA  0000              add [rax],al
    000004FC  0000              add [rax],al
    000004FE  0000              add [rax],al
    00000500  3A00              cmp al,[rax]
    00000502  0000              add [rax],al
    00000504  1200              adc al,[rax]
    00000506  0100              add [rax],eax
    00000508  0401              add al,0x1
    0000050A  400000            add [rax],al
    0000050D  0000              add [rax],al
    0000050F  001500000000      add [rel 0x515],dl
    00000515  0000              add [rax],al
    00000517  003F              add [rdi],bh
    00000519  0000              add [rax],al
    0000051B  0010              add [rax],dl
    0000051D  00F1              add cl,dh
    0000051F  FF                db 0xFF
    00000520  60                db 0x60
    00000521  016000            add [rax+0x0],esp
    00000524  0000              add [rax],al
    00000526  0000              add [rax],al
    00000528  0000              add [rax],al
    0000052A  0000              add [rax],al
    0000052C  0000              add [rax],al
    0000052E  0000              add [rax],al
    00000530  460000            add [rax],r8b
    00000533  0010              add [rax],dl
    00000535  00F1              add cl,dh
    00000537  FF                db 0xFF
    00000538  60                db 0x60
    00000539  016000            add [rax+0x0],esp
    0000053C  0000              add [rax],al
    0000053E  0000              add [rax],al
    00000540  0000              add [rax],al
    00000542  0000              add [rax],al
    00000544  0000              add [rax],al
    00000546  0000              add [rax],al
    00000548  006265            add [rdx+0x65],ah
    0000054B  63                db 0x63
    0000054C  68                db 0x68
    0000054D  2E                db 0x2E
    0000054E  61                db 0x61
    0000054F  736D              jnc 0x5be
    00000551  006D73            add [rbp+0x73],ch
    00000554  67006369          add [ebx+0x69],ah
    00000558  63                db 0x63
    00000559  6C                insb
    0000055A  6F                outsd
    0000055B  006265            add [rdx+0x65],ah
    0000055E  6E                outsb
    0000055F  63                db 0x63
    00000560  68                db 0x68
    00000561  2E                db 0x2E
    00000562  63                db 0x63
    00000563  005F73            add [rdi+0x73],bl
    00000566  7461              jz 0x5c9
    00000568  7274              jc 0x5de
    0000056A  006C6F6F          add [rdi+rbp*2+0x6f],ch
    0000056E  705F              jo 0x5cf
    00000570  63                db 0x63
    00000571  69636C65005F5F    imul esp,[rbx+0x6c],dword 0x5f5f0065
    00000578  62                db 0x62
    00000579  7373              jnc 0x5ee
    0000057B  5F                pop rdi
    0000057C  7374              jnc 0x5f2
    0000057E  61                db 0x61
    0000057F  7274              jc 0x5f5
    00000581  006D61            add [rbp+0x61],ch
    00000584  696E005F656461    imul ebp,[rsi+0x0],dword 0x6164655f
    0000058B  7461              jz 0x5ee
    0000058D  005F65            add [rdi+0x65],bl
    00000590  6E                outsb
    00000591  64                db 0x64
    00000592  00                db 0x00

  7. #6
    birinight's Avatar
    birinight is offline Learning Programmer
    Join Date
    Oct 2007
    Location
    Here
    Posts
    36
    Rep Power
    0

    Re: C and Assemly in Linux 64 Bit Platform

    OK. Since I have the answer for my own question I might well publish it so this thread can be constructive.

    I was doing wrong the link process. When linking assembly and c we must link with gcc.

    Also I must put the DEFAULT REL directive in the asm file.

    Also, I was using loopnz to jump back and decrement. loopnz doesn't affect rcx. It affects ecx.

    Code:
    DEFAULT REL
    
    segment .text
    	global loop_cicle
    	
    loop_cicle:
    	push rbp
    	mov rbp, rsp	
    	mov rcx, 0xFFFFFFFF
    		
    .ciclo:
    	dec rcx
    	jnz .ciclo
    	pop rbp
    	
    	ret
    and

    Code:
    gcc -c -o bench.c.o bench.c
    nasm -f elf64 -o bench.asm.o bench.asm
    gcc -o bench.bin bench.c.o bech.asm.o
    ./bench.bin
    Have a look at kpgen at sourceforge
    Neither Emacs or Vi are my primary editors...
    ..and I'm not ashamed!!!

  8. #7
    Join Date
    Oct 2007
    Location
    /dev/null
    Posts
    4,513
    Blog Entries
    8
    Rep Power
    59

    Re: C and Assemly in Linux 64 Bit Platform

    Since you're moving 0xFFFFFFFF to RCX, the loopnz wasn't a problem, because all of the data was contained in ECX anyway. If you were moving 0xFFFFFFFFFFFFFFFF to RCX, then that would be a problem.

  9. #8
    birinight's Avatar
    birinight is offline Learning Programmer
    Join Date
    Oct 2007
    Location
    Here
    Posts
    36
    Rep Power
    0

    Re: C and Assemly in Linux 64 Bit Platform

    Quote Originally Posted by dargueta View Post
    Since you're moving 0xFFFFFFFF to RCX, the loopnz wasn't a problem, because all of the data was contained in ECX anyway. If you were moving 0xFFFFFFFFFFFFFFFF to RCX, then that would be a problem.
    So, loopnz in 64-bit actually affects ECX?
    It's confusing. loopnz should dec RCX since the registers are promoted.
    Have a look at kpgen at sourceforge
    Neither Emacs or Vi are my primary editors...
    ..and I'm not ashamed!!!

  10. #9
    Join Date
    Oct 2007
    Location
    /dev/null
    Posts
    4,513
    Blog Entries
    8
    Rep Power
    59

    Re: C and Assemly in Linux 64 Bit Platform

    I just checked the Intel docs, and LOOPxx uses whatever sized register its current mode dictates, so in 64-bit mode it would use RCX.

    For more information, see Intel 64 and IA-32 Architectures Software Developers' Manual Volume 2A, page 637. You can get it from Intel's website for free.

  11. #10
    birinight's Avatar
    birinight is offline Learning Programmer
    Join Date
    Oct 2007
    Location
    Here
    Posts
    36
    Rep Power
    0

    Re: C and Assemly in Linux 64 Bit Platform

    Thanks. I already have that book, but I's so much information that I'm going crazy.
    Assembly is an hard thing to learn.

    I'm learning 64 bit assembly, but since I don't program in 32 bit assembly for so long I maybe will have to recapitulate.
    Have a look at kpgen at sourceforge
    Neither Emacs or Vi are my primary editors...
    ..and I'm not ashamed!!!

Closed Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Platform Transfer
    By William Fuller in forum Visual Basic Programming
    Replies: 4
    Last Post: 08-31-2011, 02:02 PM
  2. Which platform to work?
    By ahmed in forum Java Help
    Replies: 3
    Last Post: 10-21-2009, 08:30 PM
  3. Which is the best suited platform
    By Shanpav in forum General Programming
    Replies: 3
    Last Post: 04-29-2009, 08:29 AM
  4. Witch platform shall I use?
    By paez in forum General Programming
    Replies: 2
    Last Post: 12-09-2007, 05:24 PM

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts