如何将实际十六进制地址转换为存储在C中的char数组中

时间:2014-04-16 12:46:33

标签: hex memory-address

美好的一天。

我正在尝试生成以下ksym_name的十六进制内存地址的SHA1:

static char ksym_name[KSYM_NAME_LEN] = "pid_max";

以上代码来自:Watch a variable (memory address) change in Linux kernel, and print stack trace when it changes?,文件名:testhrarr.c

我正在尝试实现这个概念证明 - 不同的哈希值表示违反ksym_name完整性。因此,实现应该通过insmod module_name.ko以Linux内核模块的形式实现 C代码在Linux内核级别工作。

实施例:     0xf7ce31a8 - pid_max的kysm_name的原始内存位置     如果存储位置改变为例如0xf7ce31c1 - 表示完整性违规,符号pid_max isn&t; t     在原始位置运行并且应该发出警报。

我可以通过以下方式打印ksym_name的十六进制地址:

printk(KERN_INFO " Addresses of ksym_name of %s is : 0x%p" ,&ksym_name);

其输出显示十六进制地址,例如0xf7ce31a8。

为了说明我希望实现的目标,我提供了一个例子:How come an array's address is equal to its value in C?

参考上面链接中的代码,我想要的是:

char hex_array [40] =用于存储& my_array'的%p输出的十六进制地址即0xf7ce31a8

按照:

char hex_array [40] =" 0xf7ce31a8&#34 ;;

然后,下一步是将%p的输出引导到char数组,并从& my_array的%p的输出中生成十六进制地址的SHA1哈希。见下面的printf():

printf("&my_array = %p\n", &my_array);

总结:将& my_array的%p放入char hex_array [40]并从%p的十六进制地址为& my_array生成SHA1哈希。

我的问题是:

  1. 如何将上面的printf()中的%p的输出放入char hex_array [40],然后从%p的输出的十六进制地址生成一个SHA1哈希?

    < / LI>
  2. 如何将上面的printk()中的0x%p的输出放入char my_array [100],然后从0x%p的输出的十六进制地址生成一个SHA1哈希?

  3. 我已经仔细阅读了这些资源,但尚未找到解决方案:

    一个。 How to convert an address stored in char array to actual address?

    How to convert a string which is holding a hexadecimal number into a hexadecimal format in c?

    ℃。 How to convert char[] array of hex characters to a byte array of values?

    提前感谢您的任何帮助。

0 个答案:

没有答案