내 gcc 컴파일러를 완전히 망쳤습니다. 올바른 상태로 만드는 데 도움이 필요함

내 gcc 컴파일러를 완전히 망쳤습니다. 올바른 상태로 만드는 데 도움이 필요함

먼저 컴파일을 해보았습니다.이 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

테스트하지는 않았지만 코드는 두 개의 다른 파일로 분할되도록 되어 있습니다 . 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) {
      |     ^~~~

이 두 개의 메인은 두 개의 서로 다른 실행 파일의 일부입니다.

관련 정보