被巨巨面试了。。。。。
不过整体来讲还是感觉到了自己的缺点
我学习一个东西的时候 一般知识点延申的时候 我就去转手其它知识
然后知识点连成片的时候 再去往下延申就会很简单。。。。。。
但是 有一点就比较糟糕 经常会忘了回头来延申====
一开始 提了一下 知道那些断点 区别是什么
断点有 软件断点 硬件断点 还有 内存断点
这个我刚开始学逆向的时候就 去搜索了一下 软件断点就是 int 3 是倚靠 引发 异常 STATUS_GUARD_PAGE_VIOLATION(0x80000001) 然后 把异常转接给调试器 这个我get到了
然后 硬件断点 就是 产生的异常是STATUS_SINGLE_STEP(单步异常)
两者的区别
硬件断点:硬断点需要硬件寄存器提供支持,断点的数目受Embedded ICE中的Watchpoint数目的限制,但是可以在任何地方设置断点。
软件断点:软件断点通过在运行起来的程序中设置特征值实现,其数目不受限制,但是一般情况下软件断点只能在可写的存储器的地址中设置(比如:RAM),而不能在ROM(比如:Flash)中设置。
扩展 被一个师傅给 提点了一下
内存中断 把分页属性调成不可读不可执行 所以OD 只能下一个内存中断 那么 硬件断点为啥只能下3个呢?
因为寄存器保存地址只有3
硬件中断实现依赖于寄存器保存的地址byte
而软件中断是个伪中断
依赖于执行代码int 3于 TF标志位
但是有些地方是无法执行int 3
本质硬件中断优先级没有内部中断,比如除零异常、溢出优先级高
不能粗糙的理解 硬件断点比 软件断点的优先级高
如果想多了解的话 建议去看 《软件调试》
详情可以看
https://blog.csdn.net/macrossdzh/article/details/6898928
然后 又问道 印象比较深的题目
然后延申到 java 层能不能smc 我对java不太熟悉 平时也没有怎么用过
然后 我感觉应该是可以的 然后 ==== 就不可以了 尴尬。。。。。
然后又提到了 反调试
由于平时没有喜欢逛 看雪 吾爱 所以 反调试还是看过一些的
详情可以看
https://bbs.pediy.com/thread-225740.htm
然后 师傅又提了一句 linux平台的反调试 这个我还真的没有怎么了解过
唯一知道的就是 关于时间差的一个调试 回到寝室刚刚想起来===== 在pwn题里面也见过
然后 面试的时候有点紧张 所以就忘了 其它还有一些 详情可以看
https://blog.csdn.net/stonesharp/article/details/8211526
然后就是PE重定向 这个我其实应该也是知道的。。。
只不过一时想不起来 这个概念===
重定向就是 每个dll 基址加载的时候可能都不会太一样 ,,
比如 a.dll 加载基址是 40000 那么 如果b.dll 也是400000 那么就会把b的加载基址修改成 500000 那么 它里面的函数 的相对偏移不会变 比如 一开始 b的dll 一个函数是 412345 那么根据重定位之后就变成了512345
也就是一个重定位的作用====
这个按理说应该能答出来的 。。。
还是自己掌握的不太牢固。。。
最后问了一下刷了那些CTF平台,
然后就gg了===
虽然这次 面试的发挥很差 但是 面试的巨巨 确实算是一个我的偶像 ,, 当时 刚入门的时候就听到他的名字 翻到他的博客 也很惊讶他的学习态度=== 很努力的一个巨佬
收获: 要经常回顾自己学的东西 还差到哪里 学一个东西的时候 要刨根问底 然后学东西的时候要学牢固
不要过了一段时候就给忘了==== 还有就是 有一个良好的心态吧 ^=^
总体而言 还是很开心能被大佬面试 还能看到自己的不足 == 也感谢巨巨 浪费时间面试我这个菜鸡(逃===