例子1,只有图片
例子2,含有链接的图片
例子3,图片+介绍文字

标题样式

例子3,图片+介绍文字
注意要用换行符号换行
标题h3是紫色,h4是蓝色
PS:最大宽度300px
超出300px自动换行,参见下一张
链接
例子4,链接图片+介绍文字

『EVA:破』 画面曝光

在公开的预告片中,虽然没有主役台词 但是由鹭巢诗郎创作的音乐缓缓流淌,加上动感十足的战斗场面依然能牢牢吸引眼球。在这个简短的预告篇中,可以看到《EVA:破》中登场的EVA2号机在空中乱舞的场面,与TV系列中有异曲同工之妙的初号机和3号机激烈战斗的场面,此外还有疑似新使徒的身影出没。
猛击查看

ln

ln (List Nearest Symbols)
The ln command displays the symbols at or near the given address.

Syntax
ln Address

Parameters
Address
Specifies the address where the debugger should start to search for symbols. The nearest symbols, either before or after Address, are displayed. For more information about the syntax, see Address and Address Range Syntax.

OpenProcessToken

OpenProcessToken

【分享】利用系统Hotpatch加载驱动的一种比较取巧的方法

DLL转发

动态链接库的静态链接导致程序的DLL劫持漏洞-借助QQ程序xGraphic32.dll描述

[编程交流]DLL转发技术,实现程序隐藏与自启动(下)

浅淡对assume和org的理解

MASM中有些伪指令还真是不好理解,这里谈谈我对assume和org的一点理解。如有误,还请各位告知。

伪指令很好理解,就是无法将它们汇编成对应的机器指令。这里的assume和org也是如此,它们所影响的是编译时地址偏移的计算。

众所周知,内存的访问由内存地址决定。编译后的程序运行时具体被加载到哪是不得而知的,重定位可以通过程序被加载的基址+程序内偏移来确定,因此程序内偏移的确定就尤为重要了。

Intel系列CPU访问内存采用的是段式结构,因此无论是代码还是数据,其内存地址都需要指明段地址和段内偏移,访问时就需要一个段寄存器+一个段内偏移了。assume的作用就体现在这了,比如你在data segment中定义了一个变量var dd 0,而在代码中的访问方式如mov eax, var,由于没有指明段寄存器因此汇编器在编译时就需要计算出var的内存地址。如何计算?汇编中数据寻址默认是使用的ds段寄存器,因此只需确定var在ds段寄存器指明的段的段内偏移即可。如果没有assume伪指令,很明显,第一ds本身指向段地址在哪无法确定,第二就更别提var在ds的段内偏移了。

有了assume就不一样了,它解决了第二个问题。assume翻译过来为“假设”,assume ds: data就是假设ds指向的是data segment,而var在data segment中的偏移是可以确定的,如此var的段内偏移就确定了。但是assume还没能解决第一个问题,正如assume的翻译为“假设”一样,如果ds没有真的指向data segment,那么var的地址是ds:var在data segment中的偏移,必然是错误的。因此,实际上还需要在代码里手动mov ax, data; mov ds, ax;来让ds真正的指向data segment。

var定义在data segment中,那么var在data segment中的偏移是怎么出来的呢?这是因为MASM汇编器中有个“location counter”,由它来指示指令、数据在程序中的偏移,而org伪指令就是修改location counter的初值的。因此在程序中使用org后会使地址的计算要加上这个org值。

Java Thread.interrupt

Java Thread.interrupt 害人! 中断JAVA线程(zz)

关于Java thread的Interrupt, isInterrupt, interrupted

无觅相关文章插件,快速提升流量