通过gdb调试UDI程序

时间:2015-06-16 18:33:50

标签: linux gdb

下面的节目要求用户提供他的名字,问候他然后给我们他的真实身份证。我们可以假设在16个字母的名称(或更长)的情况下,uid变量将被覆盖,程序会给我们不正确的用户ID。但它不是。如何使用gdb解释这个?

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

struct user_info
{
    uid_t uid;
    char name[16];
};

int main(int argc, char *argv[])
{
    struct user_info info;
    info.uid = getuid();

    printf("Your name: ");
    scanf("%s", info.name);
    printf("Hello, %s!\nYour UID id %d.\n", info.name, (int) info.uid);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

像这样更改结构的顺序

struct user_info
{
    char name[16];
    uid_t uid;
};

它将覆盖您的期望。