まずコンパイルをしてみました。このCコード。
次の開発者が推奨するコマンドを使用しています。
gcc 40049.c -m32 -O2 -o decr
そしてこのエラーが発生しました
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
このコマンドを実行した後
sudo apt-get install gcc-multilib
コードがコンパイルされると思いましたが、私の考えは間違っていました。
同じコマンドを実行した後、画像のようにKali Linuxマシンの端末でエラーに特化しました。
/bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2
これは私が受け取ったエラーの一部です。
40049.c: In function ‘main’:
40049.c:200:19: warning: incompatible implicit declaration of built-in function ‘malloc’
200 | stack = (void *) malloc(65536);
| ^~~~~~
40049.c:200:19: note: include ‘<stdlib.h>’ or provide a declaration of ‘malloc’
40049.c: At top level:
40049.c:214:1: error: expected identifier or ‘(’ before ‘--’ token
214 | --------------------------------------------------- pwn.c ---------------------------------------------------
| ^~
40049.c: In function ‘privesc’:
40049.c:240:42: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
240 | commit_creds(prepare_kernel_cred((uint64_t)NULL));
| ^
40049.c: At top level:
40049.c:243:5: error: redefinition of ‘main’
243 | int main() {
| ^~~~
40049.c:178:5: note: previous definition of ‘main’ was here
178 | int main(void) {
| ^~~~
40049.c: In function ‘main’:
40049.c:249:2: warning: incompatible implicit declaration of built-in function ‘memset’
249 | memset(shellcode, 0, 0x300000);
| ^~~~~~
40049.c:249:2: note: include ‘<string.h>’ or provide a declaration of ‘memset’
40049.c:251:14: warning: implicit declaration of function ‘memcpy’ [-Wimplicit-function-declaration]
251 | void *ret = memcpy(shellcode, &privesc, 0x300);
| ^~~~~~
40049.c:251:14: warning: incompatible implicit declaration of built-in function ‘memcpy’
40049.c:251:14: note: include ‘<string.h>’ or provide a declaration of ‘memcpy’
私はこれについて非常に新しいものなので、助けてくれてありがとう。
ベストアンサー1
テストしませんでしたが、コードは2つの異なるファイルに分割されるようになっています。decr.c
すべてpwn.c
。40049.c
望むより:
40049.c:214:1: error: expected identifier or ‘(’ before ‘--’ token
214 | --------------------------------------------------- pwn.c ---------------------------------------------------
| ^~
行214は、これがファイルの始まりであることを示す表示ですpwn.c
。この行は無効です。 C.
また、以下があります。
40049.c:243:5: error: redefinition of ‘main’
243 | int main() {
| ^~~~
40049.c:178:5: note: previous definition of ‘main’ was here
178 | int main(void) {
| ^~~~
これら2つのメインは、2つの異なる実行可能ファイルの一部です。