簡體   English   中英

C:Program可以正常運行,但是與gdb一起崩潰

[英]C:Program works fine but with gdb it crashes

我是C語言新手,有問題。 這是我的代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

int read_password(FILE *file, char *password, size_t n) {
  fgets(password, n, file);
  password[strcspn(password, "\n")] = '\0';
}

void elevated_shell(){
  gid_t gid = getegid();
  setresgid(gid,gid,gid);
  fflush(stdout);
  system("/bin/bash");
}

void regular_shell(){
  gid_t gid = getgid();
  setresgid(gid,gid,gid);
  fflush(stdout);
  system("/bin/bash");
}

int main(int argc, char **argv){

  char flag[100];
  char password[100];
  FILE *file;

  printf("Hi! Welcome to my secure shell software!\n");

// Read in the root password
  file = fopen("flag.txt", "r");
  if(file == NULL) {
    printf("FAIL: Failed to open the password file\n");
    return -3;
   } else {
      read_password(file, flag, sizeof(flag));
}

// Read in the user's password
  printf("Please enter the password: ");
  fflush(stdout);
  read_password(stdin, password, sizeof(password));


   if(strcmp(flag,password) == 0) {
      printf("Correct! Here's an elevated shell :)\n");
      elevated_shell();
   } else {
       printf("Incorrect! No elevated shell for you >:)\n");
       regular_shell();
   }

}

因此,我已經編譯了該文件並運行。 當我直接運行它時,它運行良好,但是每當我嘗試使用gdb檢查內存時,它就會崩潰。 例如,當在主函數上設置斷點並運行程序時,fopen函數返回Null,因為程序打印輸出失敗:無法打開密碼文件並退出。 希望能對您有所幫助。

GDB使用運行程序的用戶特權(要引起注意的類型為whoami),而不是程序具有的特權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM