写在前面上一篇文章并发Bug之源有三,请睁大眼睛看清它们谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发Bug为了解决CPU,内存,IO的短板,增加了缓存,但这导致了可见性问题编译器/处理器擅自优化(Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行),导致有序性问题初衷是好
分类:
移动开发 时间:
2020-08-02 10:22:41
阅读次数:
107
说白了就是将汇编指令直接转换为IA-32的16进制格式.// CodeInjection2.cpp // reversecore@gmail.com // http://www.reversecore.com #include "windows.h" #include "stdio.h" typed ...
分类:
编程语言 时间:
2020-07-28 22:33:24
阅读次数:
86
Java的跨平台性 Java具有跨平台性,无疑是JVM底层翻译出来的汇编指令的不同,Unix和Window系统的汇编指令是不同的,Windows派系采用的是Intel汇编,Unix派系采用的是AT&T汇编。无论在哪个平台上编写的Java文件,编译后的class文件,放在哪个平台上都可以执行,只要下载 ...
分类:
其他好文 时间:
2020-07-26 22:56:13
阅读次数:
103
(1).globl _start @_start是GNU汇编器的默认入口标签,.globl将_start生命为外部程序可访问的标签,.globl是GNU汇编的保留关键字,前面加点是GNU汇编的语法。 (2)_start:b start_code @arm上电之后执行的第一条指令,复位向量,跳转到st ...
分类:
其他好文 时间:
2020-07-24 22:03:22
阅读次数:
98
指令 详细的指令介绍:https://blog.csdn.net/bjbz_cxy/article/details/79467688 常用的汇编指令有: mov 指令,在内存中写入以一个数,将寄存器的值写入内存,将内存中的值写入寄存器。寄存器使用名称指定,内存使用一个内存地址编号指定。 指令 宽度 ...
分类:
其他好文 时间:
2020-07-23 16:29:34
阅读次数:
62
Volatile关键字 保证线程间共享变量的可见性、有序性。 如何保证可见性:多了一个Lock的汇编指令。 什么是可见性 硬件 运行速度:CPU > 内存 > IO设备;所以在硬件的使用中,为了提高效率 CPU增加了高速缓存 读数据时,从内存读,然后缓存到CPU缓存,线程修改变量时会先同步到缓存,再 ...
分类:
编程语言 时间:
2020-07-11 16:56:15
阅读次数:
61
Windbg用户模式下,非托管代码,可以直接用bp命令设置断点。调试.Net 应用程序相对于非托管程序,要麻烦一些。因为.NET源码在编译的时候,首先是编译成IL文件,程序运行的时候,通过Load加载PE文件,然后JIT编译器负责将IL代码编译为汇编指令,然后执行。JIT编译器编译过后,就可以像非托 ...
分类:
数据库 时间:
2020-07-07 17:28:56
阅读次数:
69
汇编set语句: 实现无分支比较, 不断流水线 39383E46 |. 83F9 09 cmp ecx,0x9 39383E49 |. 0F97C0 seta al cmp 比较两个操作数,结果保存在FLAG寄存器中(同sub运算,不同在于不影响操作数, 只影响flag寄存器) seta 的 a 表 ...
分类:
其他好文 时间:
2020-06-27 09:50:34
阅读次数:
152
1. 概念 原子操作是指不被打断的操作,即它是最小的执行单位。最简单的原子操作就是一条条的汇编指令(不包括一些伪指令,伪指令会被汇编器解释成多条汇编指令)。在 linux 中原子操作对应的数据结构为 atomic_t,定义如下: typedef struct { int counter; } ato ...
分类:
其他好文 时间:
2020-06-24 19:57:50
阅读次数:
57
在源代码中设置断点,然后进行点击调试 若要启用反汇编窗口,请在工具>选项(或工具> 选项>调试下,选择启用地址级调试。 若要在调试期间打开反汇编窗口,请选择窗口>反汇编或按 Alt+8 。 除汇编指令外,反汇编窗口还可显示下列可选信息: 每条指令所在的内存地址 对于本机应用程序,它是实际内存地址。 ...
分类:
其他好文 时间:
2020-06-20 16:49:52
阅读次数:
212