CoreCLR源码探索(六) NullReferenceException是如何发生的

NullReferenceException可能是.Net程序员遇到最多的例外了, 这个例外发生的如此频繁, 以至于人们付出了巨大的努力来使用各种特性和约束试图防止它发生, 但时至今日它仍然让很多程序员头痛, 今天我将讲解这个令人头痛的例外是如何发生的.可以导致NullReferenceException发生的源代码我们先来看看什么样的代码可以导致NullReferenceException发生:
阅读本文

汇编语言(王爽) 实验九

实验要求:显示绿色、红底绿色、白底蓝色的welcome to masm! 写了一段小代码:  显示结果:   其他实验要求只需把字体属性改一下。为增加代码重用性。利用循环。assume cs:code data segment db ‘welcome to masm!‘ db 2,24h,71h data ends stack segment db 16 dup(0) st
阅读本文

Android 5.1.1 源码目录结构

Android 5.1.1   ? 1 |-- bootable     (启动引导相关代码) |-- Makefile |-- abi (applicationbinary interface,应用程序二进制接口,生成libgabi++.so相关库文件) |-- art (google在4.4后加入用来代替Dalvik的运行时) |-- bionic
阅读本文

Dalvik虚拟机原理及Xposed hook原理

Xposed是一个在andoid平台上比较成熟的hook框架,可以完美的在dalvik虚拟机上做到hook任意java方法。在art虚拟机上仍然处在beta阶段,相信以后也会稳定支持。 Xposed在dalvik上的hook原理值得好好学习,这样才能改造它,或者开发类似的hook框架。 这里做一个总结,顺便说一些这些文章里面没有写的内容: java源码经过编译后,得到很多个class文件
阅读本文

Java第一章:初识Java

一:计算机语言的发展过程    机器语言—>汇编语言—>高级语言(c/c++/java...)二:java语言的特点    跨平台性(可移植性强)、简单性、安全、健壮、完全面向对象    JVM:java虚拟机    JVM是一种规范,用来执行字节码文件。是java最核心的技术,跨平台的基础。三:java是如何实现跨平台的    1:通过“编译器”(javac.exe)将java源文件编译成字节码
阅读本文

编程语言浅述

根据项目特点不同,需考虑多种因素进行编程语言的选择。下面列举了一些更值得注意的地方。    1. 编译型、解释型、运行时编译型    (1) 编译型语言    编译型语言被编译器转换为目标机器语言。其可以产出非常高效的可执行代码,尤其是当编译器对代码进行有效地优化后。但是这种可执行代码的可移植性可能不太好,而且编译过程可能很耗时。    (2) 解释型语言    解释型语言由解释器解释和执行。一方
阅读本文

流程图

1、流程图(Flow Chart):使用图形表示算法的思路是一种极好的方法,因为千言万语不如一张图。流程图在汇编语言和早期的 BASIC语言环境中得到应用。相关的还有一种 PAD图,对PASCAL或 C语言都极适用。2、流程图的功能:一、以特定的图形符号加上说明,表示算法的图,称为 流程图或框图。二、流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种
阅读本文

c语言结构体可以直接赋值

结构体直接赋值的实现下面是一个实例:#include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two structs with three different fields void struct_assign(void) {
阅读本文

汇编语言(王爽)实验十

实验要求:在屏幕的8行3列,用绿色显示data段中的字符串。data段的数据: ‘welcome to masm!’,0实验分析: 建立在实验九的基础上。定位:8行3列。输出:只能输出welcome to masm!寄存器太多,不能重用。 解决第一个问题:di为屏幕上的位置。dh存的行,dl存的是列解决第二个问题:loop循环退出的条件是cx寄存器为0把data段传入cx。如果是0。退出。 1 a
阅读本文

汇编之 eax, ebx, ecx, edx, esi, edi, ebp, esp??

一般寄存器:AX、BX、CX、DXAX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器索引暂存器:SI、DI堆叠、基底暂存器:SP、BPSP:堆叠指标暂存器,BP:基底指标暂存器EAX、ECX、EDX、EBX:為ax,bx,cx,dx的延伸,各為32位元ESI、EDI、ESP、EBP:為si,di,sp,bp的延伸,32位元eax, ebx, ecx, edx, esi, edi
阅读本文

osg和ogre的异同

OGRE特点: ● 自动处理渲染状态和空间裁剪 ● 支持所有纹理混合和绑定技术,同时支持对GPU编程技术,支持汇编语言和所有高级语言形式的各种着色器语言,其中包括:Cg、HLSL和GLSL。 ● 强大且成熟的材质管理和脚本系统 ● 支持多种纹理图片格式 ● 全面支持对顶点和索引缓存、顶点声明以及贴图缓存 ● 给出以插件方式连接不同场景结构的接口 ● 成熟且
阅读本文

debug使用

一、DEBUG程序的调用在DOS的提示符下,可键入命令:C:DEBUG[D:][PATH][FILENAME[.EXT][PARM1][PARM2] 其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH
阅读本文

如何在MacOS上玩儿汇编?

首先,MacOS 自带nasm,只是版本有点老,编译不了64位程序,只要上官网下一个最新的,替换一下就行了。有一点需要注意的是mac上gcc编译.o文件的默认入口是_main,而使用ld命令的时候默认的事start. 下面创建helloworld.asm文件:SECTION .data msg: db “hello world!“, 0x0a len: equ $-msg SECT
阅读本文

C++抽象编程——指针(2)——特殊的指针

指向结构体(类)的指针 前面部分中的示例仅声明指向基本类型的指针。 在C ++中,将指针与结构或对象结合使用是非常普遍的。 例如,声明: Point pt(3, 4); Point *pp = &pt; 声明两个局部变量。变量是pt包含具有坐标值3和4的Point对象。变量pp包含指向同一Point对象的指针。使用基于指针的格式,这些声明产生的内存图如下所示: 从指针pp,你可以使用 * 运
阅读本文

Linux C 程序的开发环境

1.开发环境的构成编译器 gcc调试器 gdb函数库glibc系统头文件glibc_header2.gcc编译器   功能强大、性能优越的多平台编译器,gcc可以将c、c++语言源程序编译、连接成可执行文件。    以.c为后缀的文件,C语言的源代码文件    以.h为后缀的文件,是程序所包含的头文    以.i为后缀的文件,是已经预处理过的C源代码文件    以.o为后缀的文件,是编译后的目标文
阅读本文

ARM学习笔记4

指令:由CPU提供,最终生成机器码,由CPU执行. 伪指令:由编译器提供,指导编译过程,编译后不产生机器码. ARM汇编5个特点: 1.------------------------------------ldr/str架构 RISC架构的CPU不能直接操作内存,cisc可以直接操作内存. LDR/STR架构:CPU和内存数据交换必须通过寄存器来读写. ldr(load regi
阅读本文

编译原理——词法分析器实现

词法分析器实现一、写在前面  编译原理是软件工程的一项基础的课程,是研究软件是什么,为什么可以运行,以及怎么运行的学科,编译系统的改进将会直接对其上层的应用程序的执行效率,执行原理产生深刻的影响。编译原理的目的是将源语言翻译成目标语言。与翻译的区别就是,编译将高级语言编译成低级语言。至于达到什么样的低级语言,在不同的系统中是不同的,对于不同的机器都要用相应的指令系统,编译的目的就是将编译出来的语言
阅读本文

编程语言与C语言的简介

1.什么是程序 指挥计算机执行我们想要它做的动作,而依照顺序执行的一组指令2.程序的作用是什么  指挥计算机工作3.程序的特征   1.程序是一行一行的执行   2.是一种与计算机沟通的语言   3.程序是由特定的语法和关键字构成   4.程序的执行,从入口点开始,原则上是由上而下,从左到右执行4.程序语言的演变   1.机器语言       a.是计算机唯一能够执行的语言       b.与其他
阅读本文