Strace与C可执行文件?
在我最近的求职面试中,我有多个简单的问题。
起初,我被要求编写一个简单的程序,从用户那里获取输入 x 并在内存中分配(使用 malloc)x 个字节。
我简单地写道:
void main()
{
int x;
scanf("%d",&x);
malloc(x);
}
然后我被告知在运行我的可执行文件时显示所有被调用的系统调用,所以我去了终端并输入:
strace ./my_program.o
这很好,直到他问了类似的问题:
您在程序上运行 strace 时收到的输出可能非常混乱。并且无法知道在执行 malloc 期间使用了哪个系统调用。您能否建议对 C 代码进行简单的添加,以便您无论如何都能发现在执行 malloc 期间使用的系统调用。顺便说一句,您不允许向 strace 添加标志,并且必须在 C 代码中进行更改。
我在这里失去了他。可以对 C 代码进行哪些添加?
您的建议的输出示例(仍然没有帮助,因为出于奇怪的原因只有一次写入而不是 2,因为我将 C 代码更改为在 malloc 之前有一个,在 malloc 之后有一个)
execve("./a.out", ["./a.out"], 0x7ffc38701620 /* 50 vars */) = 0
brk(NULL) = 0x55df6cc1b000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=96020, ...}) = 0
mmap(NULL, 96020, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fb9d4900000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF2113 3 >