美好的一天。
我正在尝试生成以下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哈希。
我的问题是:
如何将上面的printf()中的%p的输出放入char hex_array [40],然后从%p的输出的十六进制地址生成一个SHA1哈希?
< / LI>如何将上面的printk()中的0x%p的输出放入char my_array [100],然后从0x%p的输出的十六进制地址生成一个SHA1哈希?
我已经仔细阅读了这些资源,但尚未找到解决方案:
一个。 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?
提前感谢您的任何帮助。