Articles of 64bit

反汇编内存

我想直接在内存中反汇编程序的一部分。 我感兴趣的是,当我调查堆栈时,生成的代码如何看起来像一个特定的例程如何加载以及如何绑定和调用。 有没有一个可以使用的程序或库,我可以用来反汇编从一个给定的位置提取的某个字节序列?

Linux英特尔64位组装部门

我正在努力理解为什么我的部门不工作,下面是我目前的代码,它只需要两个单一的数字,并试图分裂他们: STDIN equ 0 SYS_READ equ 0 STDOUT equ 1 SYS_WRITE equ 1 segment .data num1 dq 0 num2 dq 0 quot dq 0 rem dq 0 segment .text global _start _start: mov rax, SYS_READ mov rdi, STDIN mov rsi, num1 mov rdx, 2 syscall mov rax, SYS_READ mov rdi, STDIN mov rsi, num2 mov […]

Linux x64:为什么r10在系统调用之前是r8和r9?

我决定在前一天在大会上采取一些措施,我一直在玩真正基本的东西,比如从argv到stdout的打印。 我发现了这个带有参数和所有内容的linux系统调用号码列表 ,我很好奇为什么在r8和r9之前使用r10参数。 我发现了什么可以用什么什么什么什么的时候,像循环计数器在rcx各种古怪的约定。 是否有一个特别的原因,为什么r10被提升? 更方便吗? 我可能也应该提到我对这个好奇心感兴趣,而不是因为它导致我的问题。 编辑:我发现这个问题得到了closures,引用x64 ABI文档在页面124,它注意到用户级应用程序使用rdi, rsi, rdx, rcx, r8, r9 。 另一方面,内核使用r10而不是rcx ,并破坏rcx和r11 。 这可能解释了r10如何在那里结束,但为什么它交换?

Matlab 2011a使用64位Linux上的所有内核?

嗨,我在网上看了,但我似乎无法find答案是否需要做任何事情,使matlab使用所有内核? 据我所知,自2007年以来,multithreading已得到支持。在我的机器上,matlab仅使用一个@ 100%的内核,其余的占用2%。 我正在使用64位Linux(Mint 12)。 在我的另一台只有2个核心,32位的计算机似乎正在利用两个核@ 100%。 不是所有的时间,但在足够的情况下。 在64位,4核心电脑这从来没有发生。 我必须在64位做任何事情,让Matlab尽可能使用所有的核心? 在安装之后,我不得不做一些自定义链接,因为Matlab没有find库(例如libc.so.6),因为它没有在正确的位置查找。

64位的Linux,汇编语言,问题?

我目前正在学习汇编语言的过程。 我在Linux Mint (32位)上使用Gas 。 使用本书: 从头开始编程 。 我正在使用的机器有一个AMD Turion 64位处理器,但我只限于2 GB的RAM。 我正在考虑将Linux安装升级到Linux Mint的64位版本,但是我担心,因为本书针对的是32位x86架构,所以这些代码示例将不起作用。 所以有两个问题: 代码示例可能有问题吗? 有没有人注意到在32位上使用64位Linux有什么好处(我已经看到了堆栈溢出的一些线索,但是它们大多与Windows Vista和Windows XP相关)。

在64位的Linux机器上,在gcc中创build“long”4个字节

我正在将应用程序移植到Linux平台上的64位。 该应用程序目前支持Linux,Windows,Mac 32位和Windows 64位。 我们经常遇到的其中一个问题是long用于int,反之亦然。 直到现在这个问题还没有解决,因为long和int在应用程序当前支持的平台上是可以互换的(都是4个字节)。 代码库是一个巨大的代码库,大量的遗留代码使用了许多数据types的#define,这使得searchlong的所有用法以及用int来适当的replace成为麻烦。 作为一个短期的解决scheme,有没有办法让GCC使用4个字节而不是8个'long'? 如果有的话,我们可能会遇到什么问题? 如果没有,是否有更简单的方法来解决长期和整数的问题?

在Linux 64位处理命令行

从Linux 64位汇编程序访问进程命令行时遇到问题。 为了用最less的代码重现这一点,我制作了这个打印程序名称前5个字符的32位程序: .section .text .globl _start _开始: movl%esp,%ebp movl $ 4,%eax#写入 movl $ 1,%ebx#stdout movl 4(%ebp),%ecx#程序名称地址(argv [0]) movl $ 5,%edx#硬编码的长度 int $ 0x80 movl $ 1,%eax movl $ 0,%ebx int $ 0x80 这个程序正在工作。 当我将它翻译成64位并在Linux 64上运行时,它不会打印任何内容: .section .text .globl _start _开始: movq%rsp,%rbp movq $ 4,%rax movq $ 1,%rbx movq 8(%rbp),%rcx#程序名称地址? movq $ 5,%rdx int $ […]

C:在处理大数字时避免溢出

我已经在C中实现了一些sortingalgorithm(对整数进行sorting),仔细地使用uint64_t来存储与数据大小有关的任何东西(因此还有计数器和东西),因为algorithm也应该用几个数据集千兆整数。 algorithm应该没问题,分配的数据量应该没有问题:数据存储在文件中,而且每次只加载很less的块,即使我们将内存中的缓冲区缩小到任意大小,一切都可以正常工作。 testing数据集高达4千兆(因此16GB的数据)工作正常(sorting4Gint花了2228秒,〜37分钟),但是当我们高于那个(即:8 Gints)algorithm似乎并没有停止现在已经运行了大约16个小时)。 恐怕问题可能是由于整数溢出,也许一个循环中的计数器存储在一个32位的variables,或者我们可能调用一些函数,使用32位整数。 还有什么呢? 有没有简单的方法来检查运行时是否发生整数溢出?

如何在Windows上使用Perl来确定操作系统的位数?

使用Perl,如何确定我的程序是在32位Windows还是在64位Windows上运行? 有没有可用的API? 我可以考虑几个选项.. 检查一些Windows文件的PE_HEADER(例如: c:\windows\explorer.exe ) – 也许我可以使用详细信息如何testingWindows DLL以确定它是32位还是64位? 检查是否存在c:\program files(x86) – 如果存在,那么它是一个64位的操作系统。 否则它是一个32位的Windows操作系统。 有没有什么好办法呢? 在Perl中可用的任何API?

.Net 3.5 Windows窗体应用程序:64位Vista上的x86与x64加载时间

我们正在开发Winforms应用程序,并正在优化启动时间。 该应用程序运行在64位Vista机器上。 在我们的testing中,我们发现什么似乎是一个直观的结果。 其他所有的情况相同,只有一半的时间针对32位和64位的负载。 任何人都可以谈到为什么? 谢谢。 [编辑]我们通过ClickOnce部署应用程序,从我们的研究开始在一个独特的沙箱应用程序。 所以它总是冷冷的开始,所以看起来提高性能在这里是徒劳的。 我们的主要问题是项目中存在32位dll。 一旦我们在x86上定位项目(即使它在x64上运行),加载时间减半。 [/编辑]