相关疑难解决方法(0)

508
推荐指数
8
解决办法
5万
查看次数

bool的printf格式说明符是什么?

由于ANSI C99存在_Bool或bool通过stdbool.h.但是printfbool 还有一个格式说明符吗?

我的意思是伪代码:

bool x = true;
printf("%B\n", x);
Run Code Online (Sandbox Code Playgroud)

哪个会打印:

true
Run Code Online (Sandbox Code Playgroud)

c c++ printf boolean

413
推荐指数
5
解决办法
59万
查看次数

printf("%d",x) 如何工作/解释?

我想知道具体printf("%d",x)是如何解释的。我只知道编译器保留一个内存来放置'%', '%d','\0'并将其地址返回到,然后根据我们指定的格式说明符printf打印第二个参数。x

那么,如果我使用 example int x=5; char *p="%d"; printf(p,x),它与 是一样的吗printf("%d",x)?

c c++ printf

4
推荐指数
1
解决办法
1470
查看次数

如何在 C 语言中在运行时访问解释器路径地址?

通过使用该命令,我发现内存中的objdump地址包含 start the path ,并且由于 C 标准,该路径以一个字节结束。0x02a8/lib64/ld-linux-x86-64.so.20x00

因此,我尝试编写一个简单的 C 程序来打印这一行(我使用了 Denis Yurichev 所著的《RE for Beginners》一书中的示例 - 第 24 页):

#include <stdio.h>

int main(){
    printf(0x02a8);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我很失望地得到了分段错误而不是预期的/lib64/ld-linux-x86-64.so.2输出。

我发现使用这样一个printf不带说明符或至少不带指针转换的“快速”调用很奇怪,所以我尝试使代码更自然:

#include <stdio.h>

int main(){
    char *p = (char*)0x02a8;
    printf(p);
    printf("\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行后我仍然遇到分段错误。

我不相信这是因为内存区域受限而发生的,因为在书中,第一次尝试一切都很顺利。我不确定,也许还有那本书中没有提到的事情。

因此,需要一些清晰的解释来解释为什么每次我尝试运行程序时都会发生分段错误。

我正在使用最新的完全升级的 Kali Linux 版本。

c memory-management elf objdump memory-address

1
推荐指数
1
解决办法
404
查看次数