我正在尝试使用 x64 中的程序集中的 CreatFileA 系统调用打开一个文件进行写入,但是为了执行此操作,我需要指定所需的访问权限。我不知道GENERIC_WRITE的常量是什么,GENERIC_READ常量是80000000h。
; create the file
lea rcx, fileName
mov rdx, 40000000h
xor r8, r8
xor r9, r9
mov QWORD PTR [rsp+48h-28h], 2
mov QWORD PTR [rsp+48h-20h], 80h
mov QWORD PTR [rsp+48h-18h], 0
call CreateFileA
mov FD2, rax
; write to the new file
lea rcx, FD2
lea rdx, buffer
mov r8, len
lea r9, written
mov QWORD PTR [rsp+48h-28h], 0
call WriteFile
mov writeResult, rax
Run Code Online (Sandbox Code Playgroud) 我的.NET应用程序将如何在Windows 2008 x64下运行?作为32位应用程序还是64位?这有什么不同吗?
大家好我:)我写的批处理文件有问题.它在32位上工作正常,但显然它不适用于64位系统,我不知道为什么因为我无法访问64位系统.
这是适用于Vista 32位系统的代码
@echo off
Set Reg.Key=HKLM\SOFTWARE\Malwarebytes' Anti-Malware
Set Reg.Val=InstallPath
For /F "Tokens=2*" %%A In (
'Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"'
) Do Call Set MBAMPATH=%%B
Run Code Online (Sandbox Code Playgroud)
有人可以重新写它以64位工作吗?
总是谢谢:)
我想为未来的硬件练习编程代码.这些是什么?想到的两件主要事情是64位和多核.我还注意到缓存很重要,GPU有自己的技术,但现在我对任何图形编程都不感兴趣.
我还应该知道什么?
-edit-我知道其中很多都在现在,但很快所有的cpus都将是多核的,并且线程化将更加重要.我认为是endians(大与小),但发现它并不重要,并且已经有一个大的endian CPU来测试.
我有两个应用程序在W2k8 R2 x64上运行,一个被编译为64位,另一个被编译为32位,因为它具有COM依赖性.在这两个我试图打电话:
Process p = Process.Start("telnet.exe", string.Format("{0} {1}", address, port));
Run Code Online (Sandbox Code Playgroud)
在x64中它工作得很好,但是在32位中我得到一个System.ComponentModel.Win32Exception("系统找不到指定的文件")?
知道这里发生了什么吗?即使我打电话
Process.Start(@"C:\Windows\System32\telnet.exe")
我得到同样的例外?
谢谢,
汤姆
目前,Visual Studio刚刚开始cl.exe进行C++源代码编译.cl.exe需要位于%PATH%环境变量中列出的文件夹之一.
由于在编译64位项目之后为了编译32位项目而存在用于32位和64位编译的单独版本的cl.exe,因此必须重新启动Visual Studio.
典型的解决方案是有两个.cmd文件,每个文件适当地设置%PATH%,然后启动Visual Studio.是否有一个不需要重新启动Visual Studio的解决方案?
我想我知道我需要使用的#ifdefs在msvc和gcc上兼容x86-32和x86-64,见下文.这些平台是否完整?
#if defined(_MSC_VER)
# if defined(_M_IA64) || defined(_M_X64)
# define SIZEOF_SIZE_T 8
# define SIZEOF_VOIDP 8
# elif defined(_M_IX86)
# define SIZEOF_SIZE_T 4
# define SIZEOF_VOIDP 4
# else
# error "Unsupported MSVC platform"
# endif
#elif defined(__GNUG__)
# if defined(__x86_64__) || defined(__ia64__)
# define SIZEOF_SIZE_T 8
# define SIZEOF_VOIDP 8
# elif defined(__i386__)
# define SIZEOF_SIZE_T 4
# define SIZEOF_VOIDP 4
# else
# error "Unsupported GCC platform"
# endif
#endif
Run Code Online (Sandbox Code Playgroud)
从C程序员的角度来看,IA64和x86 64是否相同?
我也希望能够在Mac上编译.我要添加什么?
编辑:我不能使用sizeof(),因为我正在处理使用类似东西的不可触摸的遗留代码#if SIZEOF_VOIDP == …
我有一些.gz压缩文件,大约5-7gig未压缩.这些是flatfiles.
我编写了一个程序,它接受一个未压缩的文件,并按行读取它,这非常有效.
现在我希望能够在内存中打开压缩文件并运行我的小程序.
我看过zlib但我找不到一个好的解决方案.
由于32位无符号int限制,使用gzread(gzFile,void*,unsigned)加载整个文件是不可能的.
我已经尝试了gzgets,但这几乎是执行时间的两倍,而不是使用gzread读取.(我在2gig样本上测试过.)
我还研究了"缓冲",例如将gzread进程拆分为多个2gig块,使用strcchr找到最后一个换行符,然后设置gzseek.但gzseek将模拟一个完整的文件解压缩.这很慢.
我没有看到任何理智的解决方案.我总是可以做一些检查,无论当前行是否实际上有一个换行符(应该只出现在最后一个部分读取的行中),然后从程序中发生这种情况的点读取更多数据.但这可能会非常难看.
无论如何有任何建议吗?
谢谢
编辑:我不需要同时拥有整个文件,一次只需要一行,但我有一台相当庞大的机器,所以如果这是最简单的我就没有问题.
对于那些建议管道标准输入的人来说,与打开文件相比,我经历了极端的减速.这是我几个月前制作的一个小代码片段,它说明了这一点.
time ./a.out 59846/59846.txt
# 59846/59846.txt
18255221
real 0m4.321s
user 0m2.884s
sys 0m1.424s
time ./a.out <59846/59846.txt
18255221
real 1m56.544s
user 1m55.043s
sys 0m1.512s
Run Code Online (Sandbox Code Playgroud)
和源代码
#include <iostream>
#include <fstream>
#define LENS 10000
int main(int argc, char **argv){
std::istream *pFile;
if(argc==2)//ifargument supplied
pFile = new std::ifstream(argv[1],std::ios::in);
else //if we want to use stdin
pFile = &std::cin;
char line[LENS];
if(argc==2) //if we are using a filename, print it.
printf("#\t%s\n",argv[1]);
if(!pFile){
printf("Do you …Run Code Online (Sandbox Code Playgroud) 我将我们的32位Windows应用程序移植到64位,并尝试清除所有警告.我在我们的代码中发现了对CDC :: GetTextExtent的调用,它将int作为参数.
我注意到GetTextExtent只是调用GetTextExtentPoint32.32让我害怕,所以我开始寻找64位版本的GetTextExtent,但我找不到一个.
谁能告诉我GetTextExtent在64位完全安全?还是有其他方式我们应该获得这些信息?
谢谢
对于List带有n元素的元素,在x64机器上需要更多存储(如果有的话):
List<int>
Run Code Online (Sandbox Code Playgroud)
-要么-
List<long>
Run Code Online (Sandbox Code Playgroud)
我想这个问题可以改为:
在x64上,int占用的空间是否少于long?