以下是三個不同的.s文件的一部分。 .c文件已經編有三個不同的選項:此機器代碼如何防止緩衝區溢出?
- -fno-直列-fstack保護器強,
- -fno-直列-fsanitize =地址,
- -fno內聯-fno -stack-protector -zexecstack。
以下是的.S文件的內容:
handle_read:
.LFB20:
.cfi_startproc
pushq %r12
.cfi_def_cfa_offset 16
.cfi_offset 12, -16
pushq %rbp
.cfi_def_cfa_offset 24
.cfi_offset 6, -24
movq %rsi, %r12
pushq %rbx
.cfi_def_cfa_offset 32
.cfi_offset 3, -32
movq 8(%rdi), %rbx
movq %rdi, %rbp
movq 160(%rbx), %rsi
movq 152(%rbx), %rdx
cmpq %rdx, %rsi
jb .L394
cmpq $5000, %rdx
jbe .L421
handle_read:
.LASANPC20:
.LFB20:
.cfi_startproc
pushq %r15
.cfi_def_cfa_offset 16
.cfi_offset 15, -16
pushq %r14
.cfi_def_cfa_offset 24
.cfi_offset 14, -24
pushq %r13
.cfi_def_cfa_offset 32
.cfi_offset 13, -32
pushq %r12
.cfi_def_cfa_offset 40
.cfi_offset 12, -40
pushq %rbp
.cfi_def_cfa_offset 48
.cfi_offset 6, -48
movq %rdi, %rbp
addq $8, %rdi
pushq %rbx
.cfi_def_cfa_offset 56
.cfi_offset 3, -56
movq %rdi, %rax
shrq $3, %rax
subq $24, %rsp
.cfi_def_cfa_offset 80
cmpb $0, 2147450880(%rax)
jne .L1170
movq 8(%rbp), %rbx
leaq 160(%rbx), %r13
movq %r13, %r15
shrq $3, %r15
cmpb $0, 2147450880(%r15)
jne .L1171
leaq 152(%rbx), %r14
movq %rsi, %r12
movq 160(%rbx), %rsi
movq %r14, %rax
shrq $3, %rax
cmpb $0, 2147450880(%rax)
jne .L1172
movq 152(%rbx), %rdx
leaq 144(%rbx), %rcx
cmpq %rdx, %rsi
jb .L1054
cmpq $5000, %rdx
jbe .L1055
movl $httpd_err400form, %eax
shrq $3, %rax
cmpb $0, 2147450880(%rax)
jne .L1173
movl $httpd_err400title, %eax
movq httpd_err400form(%rip), %r8
shrq $3, %rax
cmpb $0, 2147450880(%rax)
jne .L1174
handle_read:
.LFB20:
.cfi_startproc
pushq %r12
.cfi_def_cfa_offset 16
.cfi_offset 12, -16
pushq %rbp
.cfi_def_cfa_offset 24
.cfi_offset 6, -24
movq %rsi, %r12
pushq %rbx
.cfi_def_cfa_offset 32
.cfi_offset 3, -32
movq 8(%rdi), %rbx
movq %rdi, %rbp
movq 160(%rbx), %rsi
movq 152(%rbx), %rdx
cmpq %rdx, %rsi
jb .L384
cmpq $5000, %rdx
jbe .L411
誰能告訴我這些代碼如何防止緩衝區溢出?
看看每個選項的文檔,這應該有助於你理解在每種情況下正在做什麼。 'fstack-protector-strong':https://lwn.net/Articles/584225/。你可以谷歌其他人。 – EkcenierK
鑑於第一和第三個功能是相同的,我會說這裏有些奇怪。此外,該函數沒有導致緩衝區溢出的訪問模式。我會說:**發佈整個功能,不只是其中的一部分** – EOF