LINUX.ORG.RU

Соглашение вызова.

 , , ,


0

2

Поясните, что за соглашение вызова используется по умолчанию?
test.c:

#include <stddef.h>
void test(int p1,void* p2,int p3, int p4, void* p5, void* p6)
{

}
int main(int argc, char** argv) {

    test(-1,NULL,0,0,NULL,NULL);
    return 0;
}

$ gcc -O0 -m64 test.c -o a.out
$ objdump -M intel -d -j .text a.out | grep -E "call(.+)test" -B 6
:
 68b:	41 b9 00 00 00 00    	mov    r9d,0x0
 691:	41 b8 00 00 00 00    	mov    r8d,0x0
 697:	b9 00 00 00 00       	mov    ecx,0x0
 69c:	ba 00 00 00 00       	mov    edx,0x0
 6a1:	be 00 00 00 00       	mov    esi,0x0
 6a6:	bf ff ff ff ff       	mov    edi,0xffffffff
 6ab:	e8 b0 ff ff ff       	call   660 <test>


Ответ на: комментарий от axdx

Ну ты посмотри какой порядок добавления. Как будто для стека добавляется. Самый последний это

test(-1
 6a6:	bf ff ff ff ff       	mov    edi,0xffffffff

u0atgKIRznY5
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.