C语言结构体学习小结
1.首先,数据类型是固定大小内存块的别名。
typedef struct man //这里的struct man 相当于一个类型
{
int age;
//man man1; //失败,因为递归调用自己,并不知道自己的大小,分配不了内存
}man;
typedef struct man
{
int age;
struct man *next; //可以,因为知道指针的大小
}man;
2.静态链表的局限性(在临时区分配内存,执行完函数之后就消失了)
int main()
{
man m1,m2,m3;
m1->next=&m2;
m2->next=&m3;
m3->next=null;
systmen("pause");
return 0;
}
逆向工程核心原理 小结
首先,先说明我在阅读和动手过程中的第一个问题。
1.如果要跟着书上的过程进行调试,并且你是用的是VS,那么建议你关闭C/C++优化。因为优化后的.exe会省略很多细节,不利于小白进行分析。具体关闭细节如下:
在解决方案资源管理器中选中项目名称,——》右键点击“”属性“”
选择“”C/C++“”选择优化关闭即可,再次运行调试,并用ollydbg调试即可。
逆向工程核心原理 pe文件(小试牛刀)小结
在开始这篇pe文件格式时,我阅读到其中的练习时感到比较混乱,在这里我推荐大家先使用PeViews这款软件进行学习。首先应该使用该软件理清思路然后再自己找一遍。PeViews如下图:
首先看着课本能分清楚基本的结构:DOS头——》DOS存根——》NT头(NT文件头和NT可选头)——》各种节区头(其中的.text .data .rsrc等)
1.我更愿意先找到文件的Imagebase
第一个蓝框为NT可选头的起始地址010bh,第二个则为Imagebase,有了Imagebase你就可以在ollyDbg中根据IAT的RVA找到函数。
2.然后各个节区的RVA和RAW(使用课本的记事本.exe)
第一个蓝框为.text的相对虚拟地址00001000h,第二个为.text在文件中的地址00000400h
3.找到IMPORT Directory Table(导入目录表)
这个IMPORT Directory Table的地址(第二个蓝框处00007604h)在这里是NT文件头起始约128个字节处,后面那四个字节000000c8h是Size成员。
前面那四个字节00000000h是导出表的字节大小.找到IMPORT Directory Table的地址即可根据RAW=RVA-VA(地址所属节区的VA)+PointerToRawData(就是节区在表中的实际位置),这里的计算就要根据第一、二步的Imagebase、节区相对虚拟地址和节区在文件中的地址————》00007604h-00001000h+00000400h=00006a04h(IMAGE_IMPORT_DESCRIPTOR的结构数组)如下图:
分别给出该数组中前五个成员的RVA和RAW,这里可以试着计算RAW。例如使用Name成员的RAW即可在文件中找到导入函数所属库的名称。INT记录着调用的API函数,而IAT记录着调用的dll中的函数的位置
而在IAT的调试中,要先去用ollydbg查看条用函数的硬编码(每个系统可能不同),再在本文件的ollydbg中找到该函数
送上思维导图:
3.链表的逻辑图