#include <sys/syscall.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/ptrace.h>
#include <sys/user.h>

#define offsetof(TYPE, MEMBER) ((unsigned long)&((TYPE *)0)->MEMBER)

int main() {
	struct user_regs_struct regs;
	printf("gpr\teip .32 %d 0\n", offsetof(struct user_regs_struct, eip));
	printf("gpr\toeax .32 %d 0\n", offsetof(struct user_regs_struct, orig_eax));
	printf("gpr\teax .32 %d 0\n", offsetof(struct user_regs_struct, eax));
	printf("gpr\tebx .32 %d 0\n", offsetof(struct user_regs_struct, ebx));
	printf("gpr\tecx .32 %d 0\n", offsetof(struct user_regs_struct, ecx));
	printf("gpr\tedx .32 %d 0\n", offsetof(struct user_regs_struct, edx));
	printf("gpr\tesp .32 %d 0\n", offsetof(struct user_regs_struct, esp));
	printf("gpr\tebp .32 %d 0\n", offsetof(struct user_regs_struct, ebp));
	printf("gpr\tesi .32 %d 0\n", offsetof(struct user_regs_struct, esi));
	printf("gpr\tedi .32 %d 0\n", offsetof(struct user_regs_struct, edi));
	printf("gpr\txfs .32 %d 0\n", offsetof(struct user_regs_struct, xfs));
	printf("gpr\txgs .32 %d 0\n", offsetof(struct user_regs_struct, xgs));
	printf("gpr\txcs .32 %d 0\n", offsetof(struct user_regs_struct, xcs));
	printf("gpr\txss .32 %d 0\n", offsetof(struct user_regs_struct, xcs));
	printf("gpr\teflags .32 %d 0\n", offsetof(struct user_regs_struct, eflags));
	return 0;
}
