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:
at the beginning andCode:push ebp mov ebp, esp
before returning.Code:pop ebp
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.
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 ebp mov ebp, esp mov ecx, 0xFFFFFFFF ciclo: loopnz ciclo pop ebp ret
Compilling: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
When the program runs it give's me a segmentation fault after the loop execution. It runs the loop.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
What am I doing wrong?
Thanks in advance.
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
I've tried to push and pop FS and GS, but the problem persists.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.
Hmm, can you compile your program and provide the generated assembly?
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
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.
andCode: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
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!!!
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.
Have a look at kpgen at sourceforge
Neither Emacs or Vi are my primary editors...
..and I'm not ashamed!!!
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.
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!!!
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks