JE

mingw32 exception在sjlj与dwarf差别-反汇编分析

天大地大妈咪最大 提交于 2020-08-17 06:52:05
sjlj (setjump/longjump)与dwarf-2为mingw32两种异常处理模型的实现。sjlj有着开销,而随linux发行的mingw32开发库包都是用sjlj版编译的,而Qt却采用dwarf-2版,那么两者之间有多少差异,本文就这问题对两版的异常代码的反汇编进行分析比较。 我使用mingw-w65-i686-810的sjlj与dwarf-2两个版本对下面异常代码编译。 __attribute__((dllimport)) int dllfunc(); int main() { dllfunc(); // _create_locale(LC_ALL, "C"); printf( " abc " ); // return 0; try { try { throw std::exception(); } catch (std::exception& )   { std::rethrow_exception(std::current_exception());   } } catch ( int ) { } catch (std::exception& e) { std::cout << e.what() << std::endl; } catch (...) { std::cout << " unknown " << std::endl; } return 0 ; }

汇编语言(王爽 第三版)检测点

爷,独闯天下 提交于 2020-08-16 12:11:37
这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开《微机原理与汇编语言》这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东西,然后开始编程,我对编程语言的学习方面要求比较高,所以开始读这本王爽老师写的汇编语言,目前为止,这本书给我的感觉就是,你能学到很多底层的东西,尤其是像键盘的读写原理,屏幕的显示,特别是对内存的操作和管理,不像课本上给你一个中断让你就能显示字符之类的,它会一步一步教你怎么把要显示的东西写到显存里面,这本书显得比较浅显易懂,让人感觉不错,特别是读了这本书再去看那些难度较高的汇编代码及微机原理,效率会高很多,下面是我读这本书的过程中对书中检测点的解答,仅代表个人观点。 第一章 检测点1. 1 1 ) 13   (8kb = 8 * 1024 = 2 ^ 13)   2 ) 1024 0 1023 3 ) 8 * 1024 1024   ( 1 byte = 8 bit,计算机以byte为存储单位) 4 ) 1024 ^ 3 1024 ^ 2 1024 5 ) 2 ^ 6 1 2 ^ 4 2 ^ 2   (kb = 2 ^ 10 Mb = 2 ^ 20 Gb = 2 ^ 30) 6 ) 1 1 2 2 4 7 ) 512 256   (8086的寄存器为16位寄存器,一次可以读取两个字节

汇编语言(王爽 第三版)检测点

本秂侑毒 提交于 2020-08-14 12:11:04
这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开《微机原理与汇编语言》这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东西,然后开始编程,我对编程语言的学习方面要求比较高,所以开始读这本王爽老师写的汇编语言,目前为止,这本书给我的感觉就是,你能学到很多底层的东西,尤其是像键盘的读写原理,屏幕的显示,特别是对内存的操作和管理,不像课本上给你一个中断让你就能显示字符之类的,它会一步一步教你怎么把要显示的东西写到显存里面,这本书显得比较浅显易懂,让人感觉不错,特别是读了这本书再去看那些难度较高的汇编代码及微机原理,效率会高很多,下面是我读这本书的过程中对书中检测点的解答,仅代表个人观点。 第一章 检测点1. 1 1 ) 13   (8kb = 8 * 1024 = 2 ^ 13)   2 ) 1024 0 1023 3 ) 8 * 1024 1024   ( 1 byte = 8 bit,计算机以byte为存储单位) 4 ) 1024 ^ 3 1024 ^ 2 1024 5 ) 2 ^ 6 1 2 ^ 4 2 ^ 2   (kb = 2 ^ 10 Mb = 2 ^ 20 Gb = 2 ^ 30) 6 ) 1 1 2 2 4 7 ) 512 256   (8086的寄存器为16位寄存器,一次可以读取两个字节

记一次 spinor flash 读速度优化

≯℡__Kan透↙ 提交于 2020-08-13 12:19:49
背景 某个项目使用的介质是 spinor , 其 bootloader 需要从 flash 中加载 os 。 启动速度是一个关键指标,需要深入优化。其他部分的优化暂且略过,此篇主要记录对 nor 读速度的优化过程。 了解现状 接到启动速度优化的任务之后, 首先是了解情况。 当前的 bootloader 实测读速度只有约 4M/s 。 为了加快速度已经尝试过 spinor 驱动改为使用四线读命令读取数据。速度并没有明显改善。待确认改动是否生效。 spinor 驱动改为使用 dma 搬运数据。尚未修改成功。 计算上限 既然是要深入优化,那知道终点在哪还是很有必要的。 整个读取过程,数据主要是从 spinor 到达 soc 的 spi 控制器,再由 cpu 或 dma 搬运到 dram 中的目标位置。 spinor --> spi控制器 --> cpu/dma --> dram 先来考虑第一段的速度,这里比较好计算。针对当前的 soc 和 flash 的组合,从规格书可得到最高的 spi 时钟频率为 100M = 100 * 10^6 ,且读数据可使用 4 线读取,即 soc 和 flash 之间有 4 根数据线在并行传输数据。那么简单算下 100 * 10^6 * 4bit = 400 * 10^6 bit/s = 47.68 MB/s , 可知极限速度为 47.68 MB/s 。

for(;;)和while(true)的区别

核能气质少年 提交于 2020-08-11 21:16:31
在看线程池源码处理空闲时间逻辑时,看见 for(;;) ,之前也见过,但是项目代码中无限循环经常使用 while(true),就查了一下有何区别。 写一个测试类,创建两个方法,分别使用for(;;) 和 while(true) 实现无限循环,查看编译后的class 文件(命令:javap -c Test.class) 都是优化成goto没区别 。 但是在C语言中有区别,两者底层实现不同: while(1)在编译后: mov eax,1 test eax,eax je foo+23h jmp foo+18h for(;;)在编译后: jmp foo+23h for(;;)在c语言中指令较少,也能够节省内存,没有判断跳转,是比while(1)更好的无限循环。 参考链接: https://blog.csdn.net/Message_lx/article/details/81075688 , https://www.sohu.com/a/240751118_100109711 来源: oschina 链接: https://my.oschina.net/u/3488841/blog/4276807

[安全攻防进阶篇] 六.逆向分析之OllyDbg逆向CrackMe01-02及加壳判断 (6)

梦想与她 提交于 2020-08-11 08:25:41
前文作者讲解了OllyDbg和在线沙箱的逆向分析过程,分享了恶意软件如何通过宏脚本发送勒索信息或密码至用户邮箱。这篇文件将带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原,基础性文章,希望对您有所帮助。技术路上哪有享乐,为了提升安全能力,别抱怨,干就对了, 从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵! 接下来我将开启新的安全系列,叫“安全攻防进阶篇”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~ 推荐前文: 网络安全自学篇系列-100篇 话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,也强烈推荐大家去看看钱老师的视频,加油~ 文章目录 一.OllyDbg基础用法 二.CrackMe01 1.题目描述 2.逆向分析 3.原理分享及序列号提取 三.CrackMe02 1

汇编语言(王爽 第三版)检测点

一世执手 提交于 2020-08-08 08:33:58
这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开《微机原理与汇编语言》这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东西,然后开始编程,我对编程语言的学习方面要求比较高,所以开始读这本王爽老师写的汇编语言,目前为止,这本书给我的感觉就是,你能学到很多底层的东西,尤其是像键盘的读写原理,屏幕的显示,特别是对内存的操作和管理,不像课本上给你一个中断让你就能显示字符之类的,它会一步一步教你怎么把要显示的东西写到显存里面,这本书显得比较浅显易懂,让人感觉不错,特别是读了这本书再去看那些难度较高的汇编代码及微机原理,效率会高很多,下面是我读这本书的过程中对书中检测点的解答,仅代表个人观点。 第一章 检测点1. 1 1 ) 13   (8kb = 8 * 1024 = 2 ^ 13)   2 ) 1024 0 1023 3 ) 8 * 1024 1024   ( 1 byte = 8 bit,计算机以byte为存储单位) 4 ) 1024 ^ 3 1024 ^ 2 1024 5 ) 2 ^ 6 1 2 ^ 4 2 ^ 2   (kb = 2 ^ 10 Mb = 2 ^ 20 Gb = 2 ^ 30) 6 ) 1 1 2 2 4 7 ) 512 256   (8086的寄存器为16位寄存器,一次可以读取两个字节

[安全攻防进阶篇] 六.逆向分析之OllyDbg逆向CrackMe01-02及加壳判断 (6)

余生长醉 提交于 2020-08-08 03:58:13
前文作者讲解了OllyDbg和在线沙箱的逆向分析过程,分享了恶意软件如何通过宏脚本发送勒索信息或密码至用户邮箱。这篇文件将带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原,基础性文章,希望对您有所帮助。技术路上哪有享乐,为了提升安全能力,别抱怨,干就对了, 从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵! 接下来我将开启新的安全系列,叫“安全攻防进阶篇”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~ 推荐前文: 网络安全自学篇系列-100篇 话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,也强烈推荐大家去看看钱老师的视频,加油~ 文章目录 一.OllyDbg基础用法 二.CrackMe01 1.题目描述 2.逆向分析 3.原理分享及序列号提取 三.CrackMe02 1

汇编语言(王爽 第三版)检测点

别来无恙 提交于 2020-08-05 12:03:23
这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开《微机原理与汇编语言》这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东西,然后开始编程,我对编程语言的学习方面要求比较高,所以开始读这本王爽老师写的汇编语言,目前为止,这本书给我的感觉就是,你能学到很多底层的东西,尤其是像键盘的读写原理,屏幕的显示,特别是对内存的操作和管理,不像课本上给你一个中断让你就能显示字符之类的,它会一步一步教你怎么把要显示的东西写到显存里面,这本书显得比较浅显易懂,让人感觉不错,特别是读了这本书再去看那些难度较高的汇编代码及微机原理,效率会高很多,下面是我读这本书的过程中对书中检测点的解答,仅代表个人观点。 第一章 检测点1. 1 1 ) 13   (8kb = 8 * 1024 = 2 ^ 13)   2 ) 1024 0 1023 3 ) 8 * 1024 1024   ( 1 byte = 8 bit,计算机以byte为存储单位) 4 ) 1024 ^ 3 1024 ^ 2 1024 5 ) 2 ^ 6 1 2 ^ 4 2 ^ 2   (kb = 2 ^ 10 Mb = 2 ^ 20 Gb = 2 ^ 30) 6 ) 1 1 2 2 4 7 ) 512 256   (8086的寄存器为16位寄存器,一次可以读取两个字节

[C++]类的空指针调用成员函数后,会发生什么事?

≡放荡痞女 提交于 2020-08-04 12:32:33
类的实例调用成员函数的原理 其实不管是通过对象实例或指针实例调用,其实底层调用的过程都是一样的,都是把当前对象的指针作为一个参数传递给被调用的成员函数。通过下面的相关实例代码进行检验: 实验的C++代码 class Student { private: int age; public: Student() {} Student(int age) : age(age) {} int getAge() { return this->age; } }; int main(int argc, char const *argv[]) { Student s(10); int age = s.getAge(); Student* ps = new Student(10); age = ps->getAge(); return 0; } 基于VS2015调试功能的反汇编代码 int main(int argc, char const *argv[]) { 00A41860 push ebp 00A41861 mov ebp,esp 00A41863 push 0FFFFFFFFh 00A41865 push 0A461D2h 00A4186A mov eax,dword ptr fs:[00000000h] 00A41870 push eax 00A41871 sub esp,104h