技术面试问题汇总第001篇猎豹移动反病毒工程师part1

上传人:nt****6 文档编号:47665285 上传时间:2018-07-03 格式:PDF 页数:5 大小:434.94KB
返回 下载 相关 举报
技术面试问题汇总第001篇猎豹移动反病毒工程师part1_第1页
第1页 / 共5页
技术面试问题汇总第001篇猎豹移动反病毒工程师part1_第2页
第2页 / 共5页
技术面试问题汇总第001篇猎豹移动反病毒工程师part1_第3页
第3页 / 共5页
技术面试问题汇总第001篇猎豹移动反病毒工程师part1_第4页
第4页 / 共5页
技术面试问题汇总第001篇猎豹移动反病毒工程师part1_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《技术面试问题汇总第001篇猎豹移动反病毒工程师part1》由会员分享,可在线阅读,更多相关《技术面试问题汇总第001篇猎豹移动反病毒工程师part1(5页珍藏版)》请在金锄头文库上搜索。

1、我在 2014 年 7 月 1 日参加了猎豹移动(原金山网络)反病毒工程师的电话面试,但是 很遗憾,由于我当时准备不足,加上自身水平不够,面试官向我提出的很多技术问题我都没 能答出来(这里面既有基础类的问题,也有比较高深的问题) ,结果没能通过那次的面试。 痛定思痛,我认认真真总结出了当时向我提出的所有问题,一共是十多条,我会分为几篇文 章来进行剖析。并且根据问题的难易程度,由浅入深进行排序。参考了大量的相关资料,给 出了业界较为权威的书籍上的答案,可能对于某些问题,会同时摘录几本书的内容,并且给 出知识扩展,以更为全面地看待这个问题。 猎豹移动的反病毒工程师(珠海)职位分为社会招聘和校园招聘

2、,其中社会招聘要求如 下: 工作职责:工作职责: 1、样本鉴定; 2、分析病毒样本并提供解决方案; 3、信息安全技术研究。 任职要求:任职要求: 1、热爱底层工作,对反病毒、逆向工程、系统漏洞等有强烈兴趣; 2、熟悉 x86 系列汇编语言,能熟练读懂汇编代码; 3、熟练使用 IDA、OD 等工具进行反汇编; 4、有一定 C/C+程序功底; 5、有良好的团队合作意识、善于沟通、有耐心、责任心强; 6、工作细心、积极主动、推动力强、有较快、较好的学习新技术能力。 校园招聘的要求如下: 工作职责:工作职责: 1、样本鉴定; 2、分析病毒样本并提供解决方案; 3、信息安全技术研究。 任职要求:任职要求

3、: 1、热爱底层开发工作,对反病毒、逆向工程、系统漏洞等有强烈兴趣; 2、熟悉 x86 系列汇编语言,能熟练读懂汇编代码; 3、具有 C/C+程序开发经验者优先。 这次所讨论的是三个基础问题, 主要关于汇编一些指令的用法。 那么接下来就是我所总 结的技术面试问题: 1、请解释一下汇编中的请解释一下汇编中的 ADC 和和 REP 指令指令。 答: (以下内容均选自软件“汇编指令助手汇编指令助手 V1.1” ) 带进位加法指令 ADC(Addition Carry) 格式:ADC OPRD1,OPRD2 功能:OPRD1OPRD1+OPRD2+CF 说明: (1)OPRD1 为任一通用寄存器或存储

4、器操作数,可以是任意一个通用寄存器,而且还 可以是任意一个存储器操作数。 OPRD2 为立即数,也可以是任意一个通用寄存器操作数。立即数只能用于源操作数。 (2)OPRD1 和 OPRD2 均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许 的,但不允许两个都是存储器操作数。 (3)加法指令运算的结果对 CF、SF、OF、PF、ZF、AF 都会有影响。以上标志也称为结 果标志。 (4)该指令对标志位的影响同 ADD 指令。 重复前缀的说明 格式:REP ; CX0 且 ZF=1 重复执行字符串指令 REPNZ/REPNE ;CX0,则转移至标号处循环执行,直至(CX)=0,继续 执行后继

5、指令。 说明: (1)本指令是用 CX 寄存器作为计数器,来控制程序的循环。 (2)它属于段内 SHORT 短类型转移,目的地址必须距本指令在-128 到+127 个字节的 范围内。 (以下内容选自IDA Pro 代码破解揭秘代码破解揭秘第 2.4 节) EFLAGS 寄存器是 32 位寄存器,包含一组状态、系统标志及控制标志。每个标志由寄存 器里一位代表,从 0 位到 31 位我们有下面这些标志。 CF:进位标志,指示在算术运算中是否带有进位或借位。用于无符号算术运算。 PF:奇偶标志,为机器中传送信息时可能出错提供校验。当目的操作数中 1 的个数为偶 数时置 1(PE) ,否则置 0(PO

6、) 。 AF: 辅助进位标志, 记录运算时低 4 位 (半个字节) 产生的进位值。 有进位时置 1 (AC) , 否则置 0(NA) 。 ZF:零标志。运算结果为 0 时置 1(ZR) ,否则置 0(NZ) 。 SF:符号标志,记录运算结果的符号。结果为负时置 1(NG) ,否则置 0(PL) 。 TF:陷阱标志,用于单步方式操作。当 TF 为 1 时,每条指令执行完后产生陷阱,由系 统控制计算机;当 TF 为 0 时,CPU 正常工作,不产生陷阱。 IF:允许中断标志。当 IF 为 1(EI)时,允许中断;IF 为 0(DI)时关闭中断。 DF: 方向标志, 在串处理指令中控制处理信息的方向

7、。 当 DF 置 1 (DN) 时每次操作后,变址寄存器 SI 和 DI 减量,这样就使串处理从高地址向低地址方向处理;当 DF 置 0(UP) 时,则反之。 OF: 溢出标志。 在运算过程中, 若操作数超出了机器能表示的范围则称为溢出, 此时 OF 标志位为 1(OV) ;否则置 0(NV) 。 IOPL(12 位到 13 位) :I/O 特权级标志。指出当前运行任务的 I/O 端口的特权级。 NF:嵌套任务标志。只在当前任务是前一任务的子任务时设置。 RF:回复标志。控制处理器对调试异常的响应。 VM:虚拟 8086 标志。控制是否启用虚拟 8086 模式。 AC:对齐检查标志。设置为启用

8、存储器的对齐检查的参考。 VIF:虚拟中断标志。IF 的虚拟映像,与 VIP 标志联合使用。 VIP:虚拟中断标志。确定是否有中断被挂起。 ID:标识标志,确定 CPU 是否支持 CPUID 指令。 第 22 到 31 位当前被保留。 (以下内容选自黑客免杀攻防黑客免杀攻防第 9.3 节) 013A13CC lea edi,dword ptr ss:ebp-0xC0 013A13D2 mov ecx,0x30 013A13D7 mov eax,0xCCCCCCCC 013A13DC rep stos dword ptr es:edi ;向 EDI 指向的地址处依次填入 EAX 中的内容,循环

9、ECX 次(也就是填 0xCC 操作) 。这是因为汇编指令 ;“int 3”的 OpCode 就是 0xCC,很显然这样做会大大提高程序的排错能力,如果由于某些不可知的原 ;因导致代码跑到了不该去的地方,那么这些成排的“int 3”指令会马上将其断下来。 2、请、请说明寄存器说明寄存器 EBP 与与 ESP 的功能,并解释在大多数函数入口点处的反汇编代码中,这两的功能,并解释在大多数函数入口点处的反汇编代码中,这两 个寄存器的作用。个寄存器的作用。 答: (以下内容选自0day 安全:软件漏洞分析技术安全:软件漏洞分析技术 第第 2 版版第 2.1.4 节) 每一个函数都独占自己的栈帧空间。当

10、前正在运行的函数的栈帧总是在栈顶。Win32 系 统提供两个特殊的寄存器用于标识位于系统顶端的栈帧。 (1)ESP:栈指针寄存器(extended stack pointer) ,其内存放着一个指针,该指针永远 指向系统栈最上面一个栈帧的栈顶。 (2)EBP:基址指针寄存器(extended base pointer) ,其内存放着一个指针,该指针永 远指向系统栈最上面一个栈帧的底部。 注意:EBP 指向当前位于系统栈最上边一个栈帧的底部,而不是系统栈的底部。严格说 来, “栈帧底部”和“栈底”是不同的概念,本书在叙述中将坚持使用“栈帧底部”这一提 法以示区别;ESP 所指的栈帧顶部和系统栈的

11、顶部是同一个位置,所以后面的叙述中并不严 格区分“栈帧顶部”和“栈顶”的概念。请您注意这里的差异,不要产生概念混淆。 函数栈帧: ESP 和 EBP 之间的内存空间为当前栈帧, EBP 标识了当前栈帧的底部, ESP 标 识了当前栈帧的顶部。 (以下内容选自0day 安全:软件漏洞分析技术安全:软件漏洞分析技术 第第 2 版版第 2.1.5 节) 函数调用大致包括以下几个步骤 (4)栈帧调整:具体包括。 保存当前栈帧状态值,以备后面恢复本栈帧时使用(EBP 入栈) ; 将当前栈帧切换到新栈(将 ESP 值装入 EBP,更新栈帧底部) ; 给新栈帧分配空间(把 ESP 减去所需空间的大小,抬高栈

12、帧) ; push ebp ;保存旧栈帧的底部 mov ebp,esp ;设置新栈帧的底部(栈帧切换) sub esp,xxx ;设置新栈帧的顶部(抬高栈帧,为新栈帧开辟空间) (以下内容选自黑客免杀攻防黑客免杀攻防第 9.3 节) 013A13C0 push ebp ;EBP 入栈保存(一般情况下将某个寄存器入栈保存的目的只有两个,一个 013A13C0 ;是需要将其通过栈传递给某个函数或代码使用,另外一种情况就是后面的 013A13C0 ; 代 码 要 使 用 到 这 个 寄 存 器 , 因 此 要 将 其 原 始 的 值 保 存 起 来 ,013A13C0 ;以备恢复) 013A13C1

13、 mov ebp,esp ;然后将堆栈指针 ESP 的值传递给 EBP,如此一来在这个函数内只需要使用 013A13C1 ; EBP 就可以对栈进行操作了。这样做的好处是不需要对 ESP 做过多的操 013A13C1 ; 作,从而更好地保证了程序的健壮性(也增加了易读性) 013A13C3 sub esp,0xC0 ;将 ESP 减 0xC0,也就是将栈顶抬高 0xC0。这里有一个专业名词叫做 013A13C3 ;“打开栈帧” 。但是通过源代码我们知道根本用不了这么大的空间,这 013A13C3 ;是编译器在编译 Debug 版本时为了增强程序的健壮性与可调试性而做 013A13C3 ; 的一

14、件事 3、请说明、请说明 CALL 与与 RET 指令的实现原理。指令的实现原理。 答: (以下内容选自汇编语言汇编语言 第二版第二版王爽著,第 10 章,仅针对 16 位系统,而 32 位及 64 位系统也可参考) call 和 ret 指令都是转移指令,它们都修改 IP,或同时修改 CS 和 IP。它们经常被共同用 来实现子程序的设计。 ret 指令用栈中数据,修改 IP 的内容,从而实现近转移; retf 指令用栈中的数据,修改 CS 和 IP 的内容,从而实现远转移。 CPU 执行 ret 指令时,进行下面两步操作: (1)(IP)=(ss)*16+(sp) (2)(sp)=(sp)+

15、2 CPU 执行 retf 指令时,进行下面 4 步操作: (1)(IP)= (ss)*16+(sp) (2)(sp)=(sp)+2 (3)(CS)= (ss)*16+(sp) (4)(sp)=(sp)+2 可以看出,如果我们用汇编语法来解释 ret 和 retf 指令,则: CPU 执行 ret 指令时,相当于进行: pop IP CPU 执行 retf 指令时,相当于进行: pop IP pop CS CPU 执行 call 指令时,进行两步操作: (1)将当前的 IP 或 CS 和 IP 压入栈中; (2)转移。 call 指令不能实现短转移, 除此之外, call 指令实现转移的方法和 jmp 指令的原理相同。 (以下内容选自0day 安全:软件漏洞分析技术安全:软件漏洞分析技术 第第 2 版版第 2.1.5 节) 函数调用大致包括以下几个步骤。 (1)参数入栈:将参数从右向左依次压入系统栈中。 (2)返回地址入栈:将当前代码区调用指令的下一条指令地址压入栈中,供函数返回 时继续执行。 (3)代码区跳转:处理器从当前代码区跳转到被调用函数的入口处。 call 函数地址 ;call 指令将同时完成两项工

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号