Я создал программу, которая записывает данные регистров в переменные, используя asm. И, похоже, работает хорошо. Но затем я решил заменить переменные массивом и записать данные регистров в массив. Я использовал тот же подход, но заметил, что когда я печатаю переменные и элементы массива, они имеют разные значения, но должны иметь одинаковые значения. Что я делаю неправильно, пытаясь записать значения регистров в массив? Как я понимаю, это должно работать так же, если записать в автономную переменную.
void read_registers(void)
{
int ebx_val, ecx_val, edx_val;
char reg_name[4][4] = {"ebx", "ecx", "edx"};
int reg_val[3];
printk("\n===OLD VALUES BELOW===");
test_syscall();/*inside of the syscall registers were written 0xDEADBEEF*/
__asm__ volatile (
"\t movl %%ebx,%0" : "=r"(ebx_val));
__asm__ volatile (
"\t movl %%ecx,%0" : "=r"(ecx_val));
__asm__ volatile (
"\t movl %%edx,%0" : "=r"(edx_val));
printk("\nReg ebx val user mode 0x%x\n", ebx_val);
printk("\nReg ecx val user mode 0x%x\n", ecx_val);
printk("\nReg edx val user mode 0x%x\n", edx_val);
printk("\n===NEW VALUES BELOW===");
__asm__ volatile (
"\t movl %%ebx,%0" : "=r"(reg_val[0]));
__asm__ volatile (
"\t movl %%ecx,%0" : "=r"(reg_val[1]));
__asm__ volatile (
"\t movl %%edx,%0" : "=r"(reg_val[2]));
for(int i=0; i<3; i++)
{
printk("\nReg %s val is 0x%x\n", reg_name + i,
reg_val[i]);
}