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位整数。 还有什么呢? 有没有简单的方法来检查运行时是否发生整数溢出?

64位应用程序上的Windows HANDLE的范围是什么?

在WinAPI上, HANDLEtypes被定义为void* ,因此在64位应用程序中, HANDLE值可以从0到18446744073709551615 。 但是,在实践中是这样吗? 任何文件是否规定了这种HANDLE的整体范围? 例如,如果想把这个HANDLE作为int32_t存储在一个完全正常的32位应用程序中,但是在64位应用程序中,这个疑惑将会持续下去。

64位Windows上的OpenSSL

我正在尝试在Windows 8上构build和链接OpenSSL,并发现它非常令人生畏。 我应该提到,我知道以下职位 OpenSSL Windows x64编译错误 如何编译OpenSSL for x64? 构buildOpenSSL VC ++静态64位库 但没有一个能够解决我真正需要知道的事情。 所以我决定和大家分享我的经验作为一个新的职位! 首先,我可以在Win32操作系统上成功地build立和链接OpenSSL,并且完美的工作。 我知道Windows 8自带了WOW64 。 “ WOW64是一个x86模拟器,允许32位基于Windows的应用程序在64位Windows上无缝运行 ”,但是当我运行我的应用程序是build立在Windows 7 32位,我收到一个错误“ 程序可以”因为libeay32.dll是从您的计算机丢失… “而” libeay32.dll “显然是在那里,并没有失踪。 为了避免registry丢失的东西,我试图在Windows 8上以32位模式构buildOpenSSL。构build成功完成,应用程序链接正确,没有错误。 同样,当我运行应用程序,我收到了同样的错误信息。 然后我试图按照以下步骤在64位模式下构build它。 set PATH=%PATH%;c:\perl\bin;c:\nasm; call "c:\visual studio\2012\vc\vcvarsall.bat" x64 perl Configure VC-WIN64A no-shared no-idea call ms\do_win64a copy ms\libeay32.def ms\libeay64.def /Y copy ms\ssleay32.def ms\ssleay64.def /Y ssed -es/out32/out64/g ms\ntdll.mak […]