mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-09 17:06:24 +00:00
171 lines
4.3 KiB
C
171 lines
4.3 KiB
C
|
|
#include <stdio.h>
|
|
|
|
void do_pushb_pos ( void )
|
|
{
|
|
unsigned long long int block[3];
|
|
__asm__ __volatile__ (
|
|
"movq %0, %%rdx\n\t"
|
|
"pushq $0x55555555\n\t"
|
|
"movq %%rsp, 0(%%rdx)\n\t"
|
|
".byte 0x6A,0x22\n\t"
|
|
"movq %%rsp, 8(%%rdx)\n\t"
|
|
"popq %%rax\n\t"
|
|
"movq %%rax,16(%%rdx)\n\t"
|
|
"movq 0(%%rdx),%%rsp\n\t"
|
|
"addq $8, %%rsp"
|
|
: : "r"(&block) : "rax","rdx","cc","memory"
|
|
);
|
|
printf(" pushb_pos: delta %lld, top64 0x%016llx\n",
|
|
block[0] - block[1], block[2]);
|
|
}
|
|
|
|
void do_pushb_neg ( void )
|
|
{
|
|
unsigned long long int block[3];
|
|
__asm__ __volatile__ (
|
|
"movq %0, %%rdx\n\t"
|
|
"pushq $0x55555555\n\t"
|
|
"movq %%rsp, 0(%%rdx)\n\t"
|
|
".byte 0x6A,0xEE\n\t"
|
|
"movq %%rsp, 8(%%rdx)\n\t"
|
|
"popq %%rax\n\t"
|
|
"movq %%rax,16(%%rdx)\n\t"
|
|
"movq 0(%%rdx),%%rsp\n\t"
|
|
"addq $8, %%rsp"
|
|
: : "r"(&block) : "rax","rdx","cc","memory"
|
|
);
|
|
printf(" pushb_neg: delta %lld, top64 0x%016llx\n",
|
|
block[0] - block[1], block[2]);
|
|
}
|
|
|
|
void do_pushw_pos ( void )
|
|
{
|
|
unsigned long long int block[3];
|
|
__asm__ __volatile__ (
|
|
"movq %0, %%rdx\n\t"
|
|
"pushq $0x55555555\n\t"
|
|
"movq %%rsp, 0(%%rdx)\n\t"
|
|
"pushw $0x3344\n\t"
|
|
"movq %%rsp, 8(%%rdx)\n\t"
|
|
"popq %%rax\n\t"
|
|
"movq %%rax,16(%%rdx)\n\t"
|
|
"movq 0(%%rdx),%%rsp\n\t"
|
|
"addq $8, %%rsp"
|
|
: : "r"(&block) : "rax","rdx","cc","memory"
|
|
);
|
|
printf(" pushw_neg: delta %lld, top64 0x%016llx\n",
|
|
block[0] - block[1], block[2]);
|
|
}
|
|
|
|
void do_pushw_neg ( void )
|
|
{
|
|
unsigned long long int block[3];
|
|
__asm__ __volatile__ (
|
|
"movq %0, %%rdx\n\t"
|
|
"pushq $0x55555555\n\t"
|
|
"movq %%rsp, 0(%%rdx)\n\t"
|
|
"pushw $0xDDCC\n\t"
|
|
"movq %%rsp, 8(%%rdx)\n\t"
|
|
"popq %%rax\n\t"
|
|
"movq %%rax,16(%%rdx)\n\t"
|
|
"movq 0(%%rdx),%%rsp\n\t"
|
|
"addq $8, %%rsp"
|
|
: : "r"(&block) : "rax","rdx","cc","memory"
|
|
);
|
|
printf(" pushw_pos: delta %lld, top64 0x%016llx\n",
|
|
block[0] - block[1], block[2]);
|
|
}
|
|
|
|
void do_pushq_pos ( void )
|
|
{
|
|
unsigned long long int block[3];
|
|
__asm__ __volatile__ (
|
|
"movq %0, %%rdx\n\t"
|
|
"pushq $0x55555555\n\t"
|
|
"movq %%rsp, 0(%%rdx)\n\t"
|
|
"pushq $0x67675656\n\t"
|
|
"movq %%rsp, 8(%%rdx)\n\t"
|
|
"popq %%rax\n\t"
|
|
"movq %%rax,16(%%rdx)\n\t"
|
|
"movq 0(%%rdx),%%rsp\n\t"
|
|
"addq $8, %%rsp"
|
|
: : "r"(&block) : "rax","rdx","cc","memory"
|
|
);
|
|
printf(" pushq_pos: delta %lld, top64 0x%016llx\n",
|
|
block[0] - block[1], block[2]);
|
|
}
|
|
|
|
void do_pushq_neg ( void )
|
|
{
|
|
unsigned long long int block[3];
|
|
__asm__ __volatile__ (
|
|
"movq %0, %%rdx\n\t"
|
|
"pushq $0x55555555\n\t"
|
|
"movq %%rsp, 0(%%rdx)\n\t"
|
|
"pushq $0x78988787\n\t"
|
|
"movq %%rsp, 8(%%rdx)\n\t"
|
|
"popq %%rax\n\t"
|
|
"movq %%rax,16(%%rdx)\n\t"
|
|
"movq 0(%%rdx),%%rsp\n\t"
|
|
"addq $8, %%rsp"
|
|
: : "r"(&block) : "rax","rdx","cc","memory"
|
|
);
|
|
printf(" pushq_neg: delta %lld, top64 0x%016llx\n",
|
|
block[0] - block[1], block[2]);
|
|
}
|
|
|
|
|
|
void do_66pushb_pos ( void )
|
|
{
|
|
unsigned long long int block[3];
|
|
__asm__ __volatile__ (
|
|
"movq %0, %%rdx\n\t"
|
|
"pushq $0x55555555\n\t"
|
|
"movq %%rsp, 0(%%rdx)\n\t"
|
|
".byte 0x66,0x6A,0x22\n\t"
|
|
"movq %%rsp, 8(%%rdx)\n\t"
|
|
"popq %%rax\n\t"
|
|
"movq %%rax,16(%%rdx)\n\t"
|
|
"movq 0(%%rdx),%%rsp\n\t"
|
|
"addq $8, %%rsp"
|
|
: : "r"(&block) : "rax","rdx","cc","memory"
|
|
);
|
|
printf("66pushb_pos: delta %lld, top64 0x%016llx\n",
|
|
block[0] - block[1], block[2]);
|
|
}
|
|
|
|
void do_66pushb_neg ( void )
|
|
{
|
|
unsigned long long int block[3];
|
|
__asm__ __volatile__ (
|
|
"movq %0, %%rdx\n\t"
|
|
"pushq $0x55555555\n\t"
|
|
"movq %%rsp, 0(%%rdx)\n\t"
|
|
".byte 0x66,0x6A,0xEE\n\t"
|
|
"movq %%rsp, 8(%%rdx)\n\t"
|
|
"popq %%rax\n\t"
|
|
"movq %%rax,16(%%rdx)\n\t"
|
|
"movq 0(%%rdx),%%rsp\n\t"
|
|
"addq $8, %%rsp"
|
|
: : "r"(&block) : "rax","rdx","cc","memory"
|
|
);
|
|
printf("66pushb_neg: delta %lld, top64 0x%016llx\n",
|
|
block[0] - block[1], block[2]);
|
|
}
|
|
|
|
|
|
int main ( void )
|
|
{
|
|
do_pushb_pos();
|
|
do_pushb_neg();
|
|
do_pushw_pos();
|
|
do_pushw_neg();
|
|
do_pushq_pos();
|
|
do_pushq_neg();
|
|
|
|
do_66pushb_pos();
|
|
do_66pushb_neg();
|
|
return 0;
|
|
}
|