Tag: 低级别

学习汇编 – 我应该从32位还是64位开始?

我真的想学汇编。 我非常擅长c / c ++,但是希望能够更好地理解更低级别的情况。 我意识到,汇编相关的问题之前已经被问到,但我只是寻找一些特定于我的情况的方向: 我正在运行Windows 7,并且对我应该如何开始使用程序集进行混淆。 我是否必须从x64开始,因为我正在运行Windows 7? 有人说“先从32位开始” – 我该怎么做呢? 我的操作系统与编写“32”或“64”位程序集的能力有什么关系? 事实上,'n bit'组件是什么意思,其中n是一个数字? 编辑: 以下是一些帮助我开始assembly的链接; 其他刚刚入门的人可能会发现他们有帮助。 我将继续更新这个列表,因为我继续我的程序集:) 注意:正如我一直在学习,我决定把重点放在用masm32编程。 所以下面的大部分资源都是关注的。 x86 标记wiki (初学者指南,参考手册,ABI文档等)。 www.masm32.com X86大会WikiBook X86反汇编WikiBook (很好理解一些约定,以及如何将高级代码翻译成汇编的基础知识) WinAsm IDE (与masm32很好地搭配) 简介:Windows汇编 (所有代码示例均适用于masm32) 中断列表 汇编教程 (非常适合帮助理解核心概念) x86汇编指南 Agner Fog的软件优化资源 ,包括一些关于在不同平台(Windows与Linux / OS X)上调用约定的好东西,以及大量关于如何有效地完成特定事情的例子。 对于初学者来说不是很好,但是对于中级到高级的读者来说非常好。 (对于英特尔和AMD处理器的每条指令,他也有详细的性能信息,对于严格的性能微型优化非常有用。有些初学者可能想看看其中的一些,开始思考CPU如何工作,以及为什么你可以做一些而不是另一个。)

什么是Java中的“内部地址”?

在Javadoc for Object.hashCode()中声明 尽可能多地合理实用,由类Object定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java™编程语言不需要此实现技术。) 这是一个常见的miconception这与内存地址有关,但它不会改变,恕不另行通知,并且hashCode()不会也不能改变对象。 @ Neet提供了一个很好的答案https://stackoverflow.com/a/565416/57695但我正在寻找更多的细节。 这里举一个例子来说明我的担忧 Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true); Unsafe unsafe = (Unsafe) theUnsafe.get(null); for (int t = 0; t < 10; t++) { System.gc(); Object[] objects = new Object[10]; for (int i = 0; i < objects.length; i++) objects[i] = new Object(); for (int i = 0; i < […]

为什么比特位是位域的问题?

任何使用位域的便携式代码似乎都可以区分小端和大端平台。 在linux内核中查看struct iphdr的声明就是这样的代码的例子。 我不明白为什么比特序列是一个问题。 据我所知,位域是纯粹的编译器构造,用于方便位级操作。 例如,考虑下面的位域: struct ParsedInt { unsigned int f1:1; unsigned int f2:3; unsigned int f3:4; }; uint8_t i; struct ParsedInt * d =&i; 在这里,写d->f2只是一个简洁而可读的说法(i>>1) & (1<<4 – 1) 。 但是,位操作是精确定义的,而且不pipe架构如何。 那么,怎么来的位域是不可移植的?