周哥简介
周哥:男,真名周扬荣,毕业于中科院软件所。创办了麦洛科菲高端IT安全培训 。
在从事程序设计与开发期间,主要参与研发的产品包括:
1.火眼Rootkit检测工具
2.基于Linux内核开发的服务器双机热备
3.Solaris内核声卡,显卡驱动
4.Comodo Internet Security 中的Defense+/Sandbox内核驱动开发
5.360安全卫士文件防火墙,桌面流氓图标智能防护
6.拥有国家发明专利两项
7.著有《程序员求职成功路:技术、求职技巧与软实力培养》,《电脑系统与数据安全防护》,《加密与解密-第4版》(作者之一)等书,在当当,京东360,CSDN等网站广获读者5星好评和推荐,并被包括北京大学,清华大学,中国科学技术大学在内的众多高校图书馆收藏。
此外,曾亲临美国加州硅谷工作生活过一段时间,并在SUN公司总部做过Solaris内核开发的技术报告;还曾经作为海文学校计算机专业考研讲师,负责中科院计算机专业考研专业课的课程讲解。
课程大纲
汇编语言是一门比C语言更底层的编程语言,在程序调试,逆向分析,反病毒,漏洞分析与挖掘等领域都要求大家熟悉和精通汇编语言。而且从汇编层面来理解C语法中的一些重点或难点(比如i++与++i,函数传参,函数调用约定等),能够更好的做到知其然并知其所以然,以前难懂难理解的地方会一目了然,豁然开朗。本课程将从汇编语言基础开讲,抓住汇编与C语言的联系,促进大家理解好和掌握好C语言与汇编。
课程序言
冯洛依曼体系结构
寄存器
汇编版hello world
内存寻址
cisc指令集VS risc指令集
传送指令集
eflags标志寄存器操作
算数运算指令
逻辑位运算
移位运算
串操作指令
跳转指令
intel和att汇编
汇编花指令
C语言调用约定与汇编
C语言函数传参与汇编
C语言语句与汇编
C语言与X64汇编、调用约定
学员评价
感谢麦洛克菲,讲得比大学老师好!
课程勘误:
第二章汇编指令,串操作指令一节,对于在asm_strncmp中对jns和js指令的使用有误。新的实现代码:
补充讲解:
1,在讲汇编返回指令时,补充对ret/retn/retf/ret n的区别如下:
RETN/RETF在汇编代码中的形式如下:
RETN
RETN N
RETF
RETF N
RET
RET N
其中retn中的n意即near,retf中的f意即far。
RETN等价于一条指令:
POP eip
RETF等价于两条指令:
POP eip
POP CS
而带有操作数N的RETN/RETF指令则是在POP之后,执行ESP=ESP+N。比如:
RETF 8等价于:
pop eip
pop cs
add esp, 8
RET既有可能是retn,也有可能是retf,由编译器决定。
2,在讲入栈出栈指令push和pop的时候,需要注意一下栈的如下四种形态(FA,EA,FD,ED):
FD:Full Descend Stack 满递减栈
ED:Empty Descend Stack 空递减栈
FA:Full Ascend Stack 满递增栈
EA:Empty Ascend Stack 空递增栈
a:满递减栈(FD),栈往低地址生长,栈顶指针指向最后一个入栈的有效数据项,入栈时栈顶指针先减,再存数据;出栈时先取数据,栈顶指针再加;
x86和arm都是满递减栈,所以在这种情况下:
push eax等价于:
sub esp, 4
mov [esp], eax
pop eax等价于
mov eax, [esp]
add esp, 4
b:空递减栈(ED),栈向低地址生长,栈顶指针指向下一个入栈的空间,先存数据,栈顶指针再减;先加栈顶指针,再取数据
push eax等价于:
mov [esp], eax
sub esp, 4
pop eax等价于
add esp, 4
mov eax, [esp]
c:满递增栈(FA),栈向高地址生长,栈顶指针指向最后一个入栈的有效数据项,栈顶指针先增,再存数据;先取数据,栈顶指针再减
push eax等价于:
add esp, 4
mov [esp], eax
pop eax等价于
mov eax, [esp]
sud esp, 4
d:空递增栈(EA),栈往高地址生长,栈顶指针指向下一个入栈的空间,先存数据,栈顶指针再增;先减栈顶指针,再取数据
push eax等价于:
mov [esp], eax
add esp, 4
pop eax等价于
sub esp, 4
mov eax, [esp]
勘误提示:如您在学习过程中发现任何错误,请告知我们错误所在的课程名称和错误所在视频的时间起始位置。错误一经我们确认,我们将会在该门课程的课程概述里提供错误更正信息,并对您表示衷心的感谢。