Hi,
Here's a possible bug in the compiler:
As can be seen from the objdump output, 64-bit arguments are passed in
32-bit registers
000000000040049c <main>:
40049c: 55 push rbp
40049d: 48 89 e5 mov rbp,rsp
4004a0: be 44 44 00 00 mov esi,0x4444
4004a5: bf 33 33 00 00 mov edi,0x3333
4004aa: e8 05 00 00 00 call 4004b4 <function>
4004af: 90 nop
4004b0: 5d pop rbp
4004b1: c3 ret
4004b2: 66 90 xchg ax,ax
also the opcodes on line 4004AF and 4004B2 seem obsolete.
Best Regards,
Mischa.
./a.out: file format elf64-x86-64
Disassembly of section .init:
0000000000400358 <_init>:
400358: 48 83 ec 08 sub rsp,0x8
40035c: e8 5b 00 00 00 call 4003bc <call_gmon_start>
400361: 48 83 c4 08 add rsp,0x8
400365: c3 ret
Disassembly of section .plt:
0000000000400370 <__libc_start_main@plt-0x10>:
400370: ff 35 ca 04 20 00 push QWORD PTR [rip+0x2004ca]
# 600840 <_GLOBAL_OFFSET_TABLE_+0x8>
400376: ff 25 cc 04 20 00 jmp QWORD PTR [rip+0x2004cc]
# 600848 <_GLOBAL_OFFSET_TABLE_+0x10>
40037c: 0f 1f 40 00 nop DWORD PTR [rax+0x0]
0000000000400380 <__libc_start_main@plt>:
400380: ff 25 ca 04 20 00 jmp QWORD PTR [rip+0x2004ca]
# 600850 <_GLOBAL_OFFSET_TABLE_+0x18>
400386: 68 00 00 00 00 push 0x0
40038b: e9 e0 ff ff ff jmp 400370 <_init+0x18>
Disassembly of section .text:
0000000000400390 <_start>:
400390: 31 ed xor ebp,ebp
400392: 49 89 d1 mov r9,rdx
400395: 5e pop rsi
400396: 48 89 e2 mov rdx,rsp
400399: 48 83 e4 f0 and rsp,0xfffffffffffffff0
40039d: 50 push rax
40039e: 54 push rsp
40039f: 49 c7 c0 50 05 40 00 mov r8,0x400550
4003a6: 48 c7 c1 c0 04 40 00 mov rcx,0x4004c0
4003ad: 48 c7 c7 9c 04 40 00 mov rdi,0x40049c
4003b4: e8 c7 ff ff ff call 400380 <__libc_start_main@plt>
4003b9: f4 hlt
4003ba: 66 90 xchg ax,ax
00000000004003bc <call_gmon_start>:
4003bc: 48 83 ec 08 sub rsp,0x8
4003c0: 48 8b 05 69 04 20 00 mov rax,QWORD PTR [rip+0x200469]
# 600830 <_DYNAMIC+0x1d0>
4003c7: 48 85 c0 test rax,rax
4003ca: 74 02 je 4003ce <call_gmon_start+0x12>
4003cc: ff d0 call rax
4003ce: 48 83 c4 08 add rsp,0x8
4003d2: c3 ret
4003d3: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0]
4003da: 00 00 00
4003dd: 0f 1f 00 nop DWORD PTR [rax]
00000000004003e0 <deregister_tm_clones>:
4003e0: b8 67 08 60 00 mov eax,0x600867
4003e5: 55 push rbp
4003e6: 48 2d 60 08 60 00 sub rax,0x600860
4003ec: 48 83 f8 0e cmp rax,0xe
4003f0: 48 89 e5 mov rbp,rsp
4003f3: 77 02 ja 4003f7
<deregister_tm_clones+0x17>
4003f5: 5d pop rbp
4003f6: c3 ret
4003f7: b8 00 00 00 00 mov eax,0x0
4003fc: 48 85 c0 test rax,rax
4003ff: 74 f4 je 4003f5
<deregister_tm_clones+0x15>
400401: 5d pop rbp
400402: bf 60 08 60 00 mov edi,0x600860
400407: ff e0 jmp rax
400409: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0]
0000000000400410 <register_tm_clones>:
400410: b8 60 08 60 00 mov eax,0x600860
400415: 55 push rbp
400416: 48 2d 60 08 60 00 sub rax,0x600860
40041c: 48 c1 f8 03 sar rax,0x3
400420: 48 89 e5 mov rbp,rsp
400423: 48 89 c2 mov rdx,rax
400426: 48 c1 ea 3f shr rdx,0x3f
40042a: 48 01 d0 add rax,rdx
40042d: 48 89 c6 mov rsi,rax
400430: 48 d1 fe sar rsi,1
400433: 75 02 jne 400437 <register_tm_clones+0x27>
400435: 5d pop rbp
400436: c3 ret
400437: ba 00 00 00 00 mov edx,0x0
40043c: 48 85 d2 test rdx,rdx
40043f: 74 f4 je 400435 <register_tm_clones+0x25>
400441: 5d pop rbp
400442: bf 60 08 60 00 mov edi,0x600860
400447: ff e2 jmp rdx
400449: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0]
0000000000400450 <__do_global_dtors_aux>:
400450: 80 3d 05 04 20 00 00 cmp BYTE PTR [rip+0x200405],0x0
# 60085c <__bss_start>
400457: 75 11 jne 40046a
<__do_global_dtors_aux+0x1a>
400459: 55 push rbp
40045a: 48 89 e5 mov rbp,rsp
40045d: e8 7e ff ff ff call 4003e0 <deregister_tm_clones>
400462: 5d pop rbp
400463: c6 05 f2 03 20 00 01 mov BYTE PTR [rip+0x2003f2],0x1
# 60085c <__bss_start>
40046a: f3 c3 repz ret
40046c: 0f 1f 40 00 nop DWORD PTR [rax+0x0]
0000000000400470 <frame_dummy>:
400470: 48 83 3d e0 01 20 00 cmp QWORD PTR [rip+0x2001e0],0x0
# 600658 <__JCR_END__>
400477: 00
400478: 74 1b je 400495 <frame_dummy+0x25>
40047a: b8 00 00 00 00 mov eax,0x0
40047f: 48 85 c0 test rax,rax
400482: 74 11 je 400495 <frame_dummy+0x25>
400484: 55 push rbp
400485: bf 58 06 60 00 mov edi,0x600658
40048a: 48 89 e5 mov rbp,rsp
40048d: ff d0 call rax
40048f: 5d pop rbp
400490: e9 7b ff ff ff jmp 400410 <register_tm_clones>
400495: e9 76 ff ff ff jmp 400410 <register_tm_clones>
40049a: 66 90 xchg ax,ax
000000000040049c <main>:
40049c: 55 push rbp
40049d: 48 89 e5 mov rbp,rsp
4004a0: be 44 44 00 00 mov esi,0x4444
4004a5: bf 33 33 00 00 mov edi,0x3333
4004aa: e8 05 00 00 00 call 4004b4 <function>
4004af: 90 nop
4004b0: 5d pop rbp
4004b1: c3 ret
4004b2: 66 90 xchg ax,ax
00000000004004b4 <function>:
4004b4: c3 ret
4004b5: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0]
4004bc: 00 00 00
4004bf: 90 nop
00000000004004c0 <__libc_csu_init>:
4004c0: 48 89 6c 24 d8 mov QWORD PTR [rsp-0x28],rbp
4004c5: 4c 89 64 24 e0 mov QWORD PTR [rsp-0x20],r12
4004ca: 48 8d 2d 7f 01 20 00 lea rbp,[rip+0x20017f] #
600650 <__init_array_end>
4004d1: 4c 8d 25 70 01 20 00 lea r12,[rip+0x200170] #
600648 <__frame_dummy_init_array_entry>
4004d8: 48 89 5c 24 d0 mov QWORD PTR [rsp-0x30],rbx
4004dd: 4c 89 6c 24 e8 mov QWORD PTR [rsp-0x18],r13
4004e2: 4c 89 74 24 f0 mov QWORD PTR [rsp-0x10],r14
4004e7: 4c 89 7c 24 f8 mov QWORD PTR [rsp-0x8],r15
4004ec: 48 83 ec 38 sub rsp,0x38
4004f0: 4c 29 e5 sub rbp,r12
4004f3: 41 89 ff mov r15d,edi
4004f6: 49 89 f6 mov r14,rsi
4004f9: 48 c1 fd 03 sar rbp,0x3
4004fd: 49 89 d5 mov r13,rdx
400500: 31 db xor ebx,ebx
400502: e8 51 fe ff ff call 400358 <_init>
400507: 48 85 ed test rbp,rbp
40050a: 74 1a je 400526 <__libc_csu_init+0x66>
40050c: 0f 1f 40 00 nop DWORD PTR [rax+0x0]
400510: 4c 89 ea mov rdx,r13
400513: 4c 89 f6 mov rsi,r14
400516: 44 89 ff mov edi,r15d
400519: 41 ff 14 dc call QWORD PTR [r12+rbx*8]
40051d: 48 83 c3 01 add rbx,0x1
400521: 48 39 eb cmp rbx,rbp
400524: 75 ea jne 400510 <__libc_csu_init+0x50>
400526: 48 8b 5c 24 08 mov rbx,QWORD PTR [rsp+0x8]
40052b: 48 8b 6c 24 10 mov rbp,QWORD PTR [rsp+0x10]
400530: 4c 8b 64 24 18 mov r12,QWORD PTR [rsp+0x18]
400535: 4c 8b 6c 24 20 mov r13,QWORD PTR [rsp+0x20]
40053a: 4c 8b 74 24 28 mov r14,QWORD PTR [rsp+0x28]
40053f: 4c 8b 7c 24 30 mov r15,QWORD PTR [rsp+0x30]
400544: 48 83 c4 38 add rsp,0x38
400548: c3 ret
400549: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0]
0000000000400550 <__libc_csu_fini>:
400550: f3 c3 repz ret
400552: 66 90 xchg ax,ax
Disassembly of section .fini:
0000000000400554 <_fini>:
400554: 48 83 ec 08 sub rsp,0x8
400558: 48 83 c4 08 add rsp,0x8
40055c: c3 ret
.intel_syntax noprefix
.global function
.code64
function:
ret
#include <stdint.h>
extern void function(uint64_t, uint64_t);
int main()
{
function(0x3333, 0x4444);
return;
}