在查看C/C++源代码时,经常遇到这样的情况:使用了某个struct,确不知道它的确切定义,查起来又不好查。下面就提供2种查找定义的方法:
C&C++实现yield
最近在想如果C/C++能实现python中的yield就好了,因为写包分析的代码十分需要这个。于是在coolshell查到了。另外还有这篇C++中的yield和fork也不错可以参考,深深感觉到了神牛的牛掰之处。“其实说白了 C 语言就是脱胎于汇编语言的,switch-case 跟 if-else 一样,无非就是汇编的条件跳转指令的另类实现而已”语出惊人令人叹服。废话不多说,下面上博文。容我再跪一会儿。
Linux_Core_Dump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。
内存对齐
一、字节对齐基本概念
解析C语言结构体对齐(内存对齐问题)
昨天写了个简单的C程序parse收到的pcap文件,因为是csi tool injection的包,所以找现有的库去拆包分析可能比较麻烦(资源似乎比较少),想着自己parse一下也不是多麻烦的事(后来花了一上午时间找问题,=。= 我太水了哎)。
动手后发现memcpy(rtap_header,pkt_data,sizeof(rtap_header));
后,rtap_header里的data rate打印出来总是不对,(GDB)x/14xb rtap_header
看了一下结构体的前14个字节也完全符合wireshark上打印的数据,可是(GDB)p/x rtap_header->data_rate
看到的却完全不对。短暂的懵逼后( ̄(●●) ̄) ,想到了是不是自己印象中struct的存储方式不对,然后果了个然。
===============华丽的分割线===============