当通过ndk-build从https://github.com/secmob/PoCForCVE-2015-1528编译CVE-2015-1528的poc时,会出现此错误:
[armeabi] Compile++ thumb: exploitmedia <= shellcode.cpp
/home/android/Desktop/work_space/PoCForCVE-2015-1528/mediaserver/jni/shellcode.cpp:109:38: warning: always_inline function might not be inlinable [-Wattributes]
__attribute__((always_inline)) void *run_code(char *code,dlopen_t dlopen_f){
^
/tmp/ccd5ZsxF.s: Assembler messages:
/tmp/ccd5ZsxF.s: Error: unaligned opcodes detected in executable segment
make: *** [/home/android/Desktop/work_space/PoCForCVE-2015-1528/mediaserver/obj/local/armeabi/objs/exploitmedia/shellcode.o] Error 1
注意:编写此poc的目标是教育性的。
答案 0 :(得分:0)
我找到了解决方案。我应该使用像mmm这样的AOSP编译器。 编译AOSP后,出现mmm commnad。 用法:
mmm path/to/PoCForCVE-2015-1528/mediaserver/
答案 1 :(得分:0)
未使用的自动分配变量可能导致--gdwarf-2
我对问题没有很深入的了解,但是这里有一个最小的可运行示例。
考虑以下Linux ARMv8问候世界:
.text
.global _start
_start:
asm_main_after_prologue:
/* write */
mov x0, #1
ldr x1, =msg
ldr x2, =len
mov x8, #64
svc #0
/* exit */
mov x0, #0
mov x8, #93
svc #0
msg:
.ascii "hello syscall v8\n"
len = . - msg
可与以下命令很好地组合在一起:
aarch64-linux-gnu-as --gdwarf-2 hello.S
在Ubuntu 16.04 aarch64-linux-gnu-gcc 5.4.0上。
现在,如果您删除对msg
变量的引用:
.text
.global _start
_start:
asm_main_after_prologue:
/* exit */
mov x0, #0
mov x8, #93
svc #0
msg:
.ascii "hello syscall v8\n"
len = . - msg
它开始失败并显示:
hello.S: Assembler messages:
hello.S: Error: unaligned opcodes detected in executable segment
以某种方式,当删除引用时,必须考虑hello syscall v8
字符串是一条指令,而不是数据。