저는 i386 : x86_64에서 작업 중이며 쉘을 시작하는 간단한 프로그램을 작성하고 있습니다. 벨로우가 내 어셈블리 야.세그먼트 결함 어셈블리 i386 : x86_64
.section .data
.section .text
.globl _start
_start:
xor %rax, %rax
mov $70, %al
xor %rbx, %rbx
xor %rcx, %rcx
int $0x80
jmp ender
starter:
pop %rbx
xor %rax, %rax
mov %al, 0x07(%rbx)
mov %rbx, 0x08(%rbx)
mov %rax, 0x0c(%rbx)
mov $11, %al
lea 0x08(%rbx), %rcx
lea 0x0c(%rbx), %rdx
int $0x80
ender:
call starter
.string "/bin/sh"
문제는 계속 세그먼트 화 오류가 발생한다는 것입니다. 내가 추측을하고 표시된 주소를이라고 말할거야
0000000000400078 <_start>:
400078: 48 31 c0 xor %rax,%rax
40007b: b0 46 mov $0x46,%al
40007d: 48 31 db xor %rbx,%rbx
400080: 48 31 c9 xor %rcx,%rcx
400083: cd 80 int $0x80
400085: eb 1b jmp 4000a2 <ender>
0000000000400087 <starter>:
400087: 5b pop %rbx
400088: 48 31 c0 xor %rax,%rax
40008b: 88 43 07 mov %al,0x7(%rbx)
40008e: 48 89 5b 08 mov %rbx,0x8(%rbx)
400092: 48 89 43 0c mov %rax,0xc(%rbx)
400096: b0 0b mov $0xb,%al
400098: 48 8d 4b 08 lea 0x8(%rbx),%rcx
40009c: 48 8d 53 0c lea 0xc(%rbx),%rdx
4000a0: cd 80 int $0x80
00000000004000a2 <ender>:
4000a2: e8 e0 ff ff ff callq 400087 <starter>
4000a7: 2f (bad)
4000a8: 62 (bad)
4000a9: 69 .byte 0x69
4000aa: 6e outsb %ds:(%rsi),(%dx)
4000ab: 2f (bad)
4000ac: 73 68 jae 400116 <ender+0x74>
(나쁜) : 나는 objdump를 -D my_prog을 사용하면 출력이 ...
분해 섹션는 .text이다 이는 seg 오류를 일으키는 것입니다. 나는 mem에 할당되지 않은 mem 접근을 원하기 때문에 이것이 일어나고 있음을 안다. 나는 내가해야 할 일을 정말로 모르겠다. 저는 리눅스를 사용하고 있습니다.
도움 주셔서 감사합니다.
왜 텍스트 섹션에 문자열을 넣었습니까? –
자습서를 진행하면서 코드를 붙여 넣습니다. 그것은 문제가 될 수 있습니다. –