GNU 어셈블러 사용 malloc을 호출하여 C 구조체를 만들고 구조체에 값을 삽입하고 해당 구조체에 대한 포인터를 반환하려고합니다. 내가 코드를 업데이트 한GNU 어셈블러를 사용하여 동적으로 구조체를 만들고 그것에 대한 포인터를 반환합니다.
push %ebp
movl %esp, %ebp
subl $0x1c, %esp
#movl $20, (%esp) #I've tried this but it doesn't seem to help
push $20 #Struct is 20 bytes
call malloc
test %eax, %eax
jz allocateFailed
jmp allocateOK
allocateFailed:
leave
ret
allocateOK:
movl 8(%ebp), %edx
movl %edx, 8(%eax)
movl 12(%ebp), %edx
movl %edx, 12(%eax)
leave
ret
떨어진 %의 EBX 레지스터를 사용하여 한 번 봐 복용에서 머물 :
다음struct node {
void *next;
void *last;
char *name;
int id;
uint8_t number;
uint8_t numberTwo;
uint8_t numberThree;
uint8_t numberFour;
}
내가 사용하고는 GNU 조립입니다 : 다음은 구조체이다 어셈블러가 이것을 어떻게 처리했는지를 나타내는 함수의 Objdump.
매개 변수가 잘 표시되지만 새로 만든 구조체에 넣으려고하면 seg 오류가 발생합니다. 아래는 코어 덤프입니다.
프로그램이 신호 6으로 종료되었습니다. 중단되었습니다. __kernel_vsyscall에서
0 0xb7727424는()
내가 GDB의 역 추적을 실행할 것을 얻을 것입니다 : 나는 또한 --gstabs와 함께 C에서이 함수를 작성하고 컴파일 한
0 allocateOK() at new_student.s:25
1 0x00000014 in ??() #Not sure what this is coming from
2 0xb7fc5a20 in ??() from /lib/i386-linux-gnu/libc.so.6
3 0x080485ed in test() #function that calls and passes in the parameters
4 0x080487b4 in main()
- o 그것을 사용하기 위해 objdump를 사용했다. 나는 내 주변에있는 것처럼 보이지만 나는 그것을 알아낼 수 없다.
sub $0x1c,%esp
movl $0x14,(%esp)
call 8048350 <[email protected]>
mov 0x20(%esp),%edx
mov %edx,0xc(%eax)
mov 0x24(%esp),%edx
mov %edx,0x8(%eax)
모든 도움을 주시면 감사하겠습니다. 구조체를 만들고 작업하기 위해 어셈블리 (C 만 사용)를 사용한 적이 없습니다. 나는 약간의 연구를했고 몇 가지 시도를 해왔지만, 나는 그것을 얻는 것처럼 보입니다.
도움 주셔서 감사합니다. 코드와 질문을 업데이트했습니다. – RoberJimmer