内存地址空间为何用十六进制表示(pamp分析基础)

内存地址空间与十六进制。

1应用场景:pamp

在gdb 或者pmap查看内容的时候经常出现 如下  0x8462960,0x8462960含义是啥

例如

wang@ubuntu:~/study/code$ pmap -d 1468 >>aaa
wang@ubuntu:~/study/code$ vi aaa
1468:   ./server
Address   Kbytes Mode  Offset           Device    Mapping
00110000     116 r-x-- 0000000000000000 008:00001 libgcc_s.so.1
0012d000       4 r---- 000000000001c000 008:00001 libgcc_s.so.1
0012e000       4 rw--- 000000000001d000 008:00001 libgcc_s.so.1
00142000    1380 r-x-- 0000000000000000 008:00001 libc-2.11.1.so
0029b000       8 r---- 0000000000159000 008:00001 libc-2.11.1.so
0029d000       4 rw--- 000000000015b000 008:00001 libc-2.11.1.s

 

0x8462960 是 内存地址空间是.

十六进制的表示:
C语言、Shell、Python语言及其他相近的语言使用字首“0x”,例如“0x5A3”。开头的“0”令解析器更易辨认数,而“x”则代表十六进制(就如“O”代表八进制)。在“0x”中的“x”可以大写或小写,0-9对应0-9;A-F对应10-15;N进制的数可以用0---(N-1)的数表示超过9的用字母A-F。

 

2 具体说明:内存地址空间为何用十六进制表示

编程中,我们常用的还是10进制.毕竟C/C++是高级语言。   

比如:int a = 100,b = 99;   

不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决 问题。但二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:   

0000 0000 0000 0000 0110 0100   

面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。

 

 
参考:
http://www.cnblogs.com/liuzhendong/archive/2011/10/17/2215632.html


十六进制
http://baike.baidu.com/view/230306.htm

理解C指针: 一个内存地址对应着一个值
http://www.cppblog.com/hex108/archive/2011/06/18/124234.html

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PAM(Pluggable Authentication Modules)是 Linux 系统中用于进行身份验证的模块化框架,可以通过编写 PAM 模块来实现自定义的身份验证方式。在 C++ 中,可以使用 PAM 库中的函数来实现 PAM 指令。 下面是一个使用 PAM 库实现身份验证的 C++ 代码示例: ```c++ #include <security/pam_appl.h> #include <iostream> using namespace std; // PAM 认证回调函数 int pam_authenticate_callback(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) { struct pam_response *reply = (struct pam_response*)malloc(num_msg*sizeof(struct pam_response)); if (reply == NULL) { return PAM_BUF_ERR; } for (int i = 0; i < num_msg; i++) { if (msg[i]->msg_style == PAM_PROMPT_ECHO_OFF) { // 输入密码 reply[i].resp = strdup((char*)appdata_ptr); reply[i].resp_retcode = 0; } else { // 其他消息直接回答 Yes reply[i].resp = strdup("Yes"); reply[i].resp_retcode = 0; } } *resp = reply; return PAM_SUCCESS; } int main(int argc, char *argv[]) { struct pam_conv conv = { &pam_authenticate_callback, (void*)"password" }; pam_handle_t *pamh = NULL; int retval; // 开始 PAM 认证 retval = pam_start("login", NULL, &conv, &pamh); if (retval != PAM_SUCCESS) { cout << "PAM start failed: " << pam_strerror(pamh, retval) << endl; return 1; } // 进行 PAM 认证 retval = pam_authenticate(pamh, 0); if (retval != PAM_SUCCESS) { cout << "PAM authenticate failed: " << pam_strerror(pamh, retval) << endl; return 1; } cout << "PAM authenticate succeeded!" << endl; // 结束 PAM 认证 pam_end(pamh, retval); return 0; } ``` 在上述代码中,使用了 pam_start() 函数开始 PAM 认证过程,使用 pam_authenticate() 函数进行身份验证,使用 pam_end() 函数结束 PAM 认证过程。同时,定义了一个 pam_authenticate_callback() 回调函数,用于接收 PAM 认证过程中的消息,并进行相应的处理。 这里的示例代码只是一个简单的 PAM 认证过程,实际中需要根据具体需求进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值