草庐IT

windows - Subsystem for Unix Application on Windows 如何在汇编中实现系统调用?

比如这个linux系统调用int$0x80。SUA是否实现了类似的东西?如果是这样,命令是什么?这个特定的代码是我想更改以在SUA上使用的代码#cpuid.sSampleprogramtoextracttheprocessorVendorID.section.dataoutput:.ascii"TheprocessorVendorIDis'xxxxxxxxxxxxx'\n".section.text.globl_start_start:movl$0,%eaxcpuidmovl$output,%edimovl%ebx,28(%edi)movl%edx,32(%edi)movl%ecx,3

c++ - Windows 上的慢速 std::string 连接

我有一个程序需要将许多字符串连接在一起(更准确地说是将整数转换为字符串)。在我的Ubuntu机器上(运行g++7.3.0),代码运行时间为1.5秒。但是代码也需要在Windows上运行(使用MinGW运行g++6.3.0),需要15秒才能完成。此外,Ubuntu设置在使用i7-4712MQCPU@2.30GHz的慢得多的笔记本电脑上运行,而Windows机器在i7-7700KCPU@4.20GHz上运行。重现时间的代码如下所示。我用g++tester.cpp-O2-otester(或tester.exeforwindows)编译代码#include#includeintmain(int

c++ - 二元运算符返回 Xvalue 而不是 PRvalue?

根据this博客——我意识到这是旧的,如果它不再被认为是相关的,请告诉我——实现二元运算符的最佳方法如下...//The"usualimplementation"Matrixoperator+(Matrixconst&x,Matrixconst&y){Matrixtemp=x;temp+=y;returntemp;}//---Handlervalues---Matrixoperator+(Matrix&&temp,constMatrix&y){temp+=y;returnstd::move(temp);}Matrixoperator+(constMatrix&x,Matrix&&tem

c++ - 邪恶的 Actor 会被邪恶的编译器击败吗?

这不是学术代码或假设性问题。最初的问题是将代码从HP11转换为HP1123Itanium。基本上归结为HP1123Itanium上的编译错误。在Windows上复制它进行研究时,我真的很抓狂。除了最基本的方面,我已经删除了所有内容...如果按原样运行,您可能必须按controlD退出控制台窗口:#include"stdafx.h"#includeusingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){charblah[6];constintIAMCONST=3;int*pTOCONST;pTOCONST=(int*)&IAMCONST;(*

assembly - 使用golang汇编语言下划线实现golang方法

我写了一个简单的go包如下:packagemytesttypeTint32func(aT)MyTest(bT)(T,T)func(p*T)MyTestp(bT)(T,T)funcMyTest(a,bT)(T,T)funcMyTestp(p*T,bT)(T,T)对应的汇编代码(由gotoolobjdump生成),如下:TEXT·MyTest(SB),$0-16MOVLa+0x0(FP),AXMOVLb+0x4(FP),BXMOVLBX,CXADDLAX,CXMOVLCX,r1+0x8(FP)SUBLBX,AXMOVLAX,r2+0xc(FP)RETTEXT·MyTestp(SB),$0-

assembly - 使用golang汇编语言下划线实现golang方法

我写了一个简单的go包如下:packagemytesttypeTint32func(aT)MyTest(bT)(T,T)func(p*T)MyTestp(bT)(T,T)funcMyTest(a,bT)(T,T)funcMyTestp(p*T,bT)(T,T)对应的汇编代码(由gotoolobjdump生成),如下:TEXT·MyTest(SB),$0-16MOVLa+0x0(FP),AXMOVLb+0x4(FP),BXMOVLBX,CXADDLAX,CXMOVLCX,r1+0x8(FP)SUBLBX,AXMOVLAX,r2+0xc(FP)RETTEXT·MyTestp(SB),$0-

linux - 如何格式化程序集注释

我有以下示例注释GAS代码cmpb$45,(%ebx)#45-ASCII'-'jner_filenamecmpb$118,1(%ebx)#118-ASCII'v'jner_filenamemovl$4,%eax#write(movl$1,%ebx#STDOUT,movl$Leng,%edx#len*movl$Inform,%ecx#*Bufferint$0x80#);如何使用AWK格式化注释:cmpb$45,(%ebx)#45-ASCII'-'jner_filenamecmpb$118,1(%ebx)#118-ASCII'v'jner_filenamemovl$4,%eax#write

linux - 如何格式化程序集注释

我有以下示例注释GAS代码cmpb$45,(%ebx)#45-ASCII'-'jner_filenamecmpb$118,1(%ebx)#118-ASCII'v'jner_filenamemovl$4,%eax#write(movl$1,%ebx#STDOUT,movl$Leng,%edx#len*movl$Inform,%ecx#*Bufferint$0x80#);如何使用AWK格式化注释:cmpb$45,(%ebx)#45-ASCII'-'jner_filenamecmpb$118,1(%ebx)#118-ASCII'v'jner_filenamemovl$4,%eax#write

linux - 在 Linux 64 位中处理命令行

这个问题在这里已经有了答案:Whathappensifyouusethe32-bitint0x80LinuxABIin64-bitcode?(1个回答)关闭4年前。我在从Linux64位汇编程序访问进程命令行时遇到问题。为了用最少的代码重现这一点,我制作了这个打印程序名称前5个字符的32位程序:.section.text.globl_start_start:movl%esp,%ebpmovl$4,%eax#writemovl$1,%ebx#stdoutmovl4(%ebp),%ecx#programnameaddress(argv[0])movl$5,%edx#hard-codedle

linux - 在 Linux 64 位中处理命令行

这个问题在这里已经有了答案:Whathappensifyouusethe32-bitint0x80LinuxABIin64-bitcode?(1个回答)关闭4年前。我在从Linux64位汇编程序访问进程命令行时遇到问题。为了用最少的代码重现这一点,我制作了这个打印程序名称前5个字符的32位程序:.section.text.globl_start_start:movl%esp,%ebpmovl$4,%eax#writemovl$1,%ebx#stdoutmovl4(%ebp),%ecx#programnameaddress(argv[0])movl$5,%edx#hard-codedle
12