首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个由跨平台产生浮点数bug | 有你意想不到结果

其实上面这段C++代码在不同平台结果如下: Windows 32/64位下:-202014160 Linux 64位下(CentOS 6 gcc 4.4.7):-202014160 Linux 32...若是用两个double相乘可得正确且合理运算结果。// 就别纠结我用“正确、合理”这两个词是否恰当了。问题是为何C#X64X86结果不一致?...C++ x86 / x64下都生成了类似的代码(这也就是为何 C++ x86/x64C#x64结果一致)即都用了先用浮点乘起来(mulss),然后转成double(cvtss2sd)。...从上面的汇编代码可以看出 C# X86生成代码用指令fld/fmul/fstp等。...C#浮点是支持该标准,其中其官方文档也提到了浮点运算可能产生比返回类型更高精度(正如上面的返回精度就超过了float精度),并说明如果硬件支持可扩展浮点精度的话,那么所有的浮点运算都将用此精度进行以提高效率

1.4K30

实现通过COM组件方式实现java调用C#DLL文件完整demo

最近因为工作需要,客户那边工程师使用是JAVA语言开发程序,我们这边平台中是用C#语言开发,因为有些操作必须统一,所以我在网上查找解决方法,自己也实践过,在这里做个笔记吧,分享一下。...一、使用C#编写com组件   开发环境 :VS2017   1、新建工程:CalcTest(类库项目,根据自己喜好需要取工程名,框架我这里使用是:.NET Framework 4 ,你可以根据自己来选...3、选择生成看到以下界面,平台目标选择:X64, 为COM互操作注册(C) 勾上,如下图操作。 ?...interface ICalc { [DispId(1)] int Add(int a, int b); //返回int需要调用方法名一致...注:因为上面我们选择X64平台,因此框架是选择Framework64,路径为: C:\Windows\Microsoft.NET\Framework64\v4.0.30319 还有步骤1意思就是,

2.7K80
您找到你想要的搜索结果了吗?
是的
没有找到

CoreHook:基于.NET Core运行时实现Windows HOOK库

支持平台 CoreHook支持在运行Windows各种体系结构上进行应用程序函数调用拦截。还计划了Linux和macOS支持。...平台 Architecture 操作系统 x86 Windows x64 Windows ARM Windows 10 IoT Core 经过测试平台 操作系统 架构 Windows 7 SP1 x86...将x86x64应用程序环境变量设置为运行时配置文件目录。这允许您为应用程序32-bit和64-bit应用程序提供不同配置文件。...注意:目前无法在.NET Core平台管道上设置正确访问控制,此处正在跟踪问题,因此我们使用P / Invoke kernel32.dll!CreateNamedPipe直接调用。...默认配置是Release,输出将在Publish目录中,在发布脚本相同位置创建。 .

1.6K20

C# 如何在项目引用x86 x64非托管代码

因为现在项目使用是 AnyCpu 在 x86 设备使用x86,在x64使用x64,但是对于非托管代码,必须要在x64使用x64dll,在x86使用x86dll。...在C++没有和C#一样 AnyCpu 所以需要在项目运行在x86时候加载x86dll。 本文告诉大家如何在代码引用不同dll。...使用宏 最简单方法是编译两个版本,编译多个版本可以点击配置管理器,然后创建x86x64,然后版本添加宏,这样就可以判断宏来使用不同dll 点击活动解决方案平台,然后点击新建 选择项目属性,点击生成..."x64" : "x86"); SetDllDirectory(path); 这样就可以直接写一个函数,最后方法是我推荐。...C++ 方法了,使用下面的代码调用 var n = hfwzsnHzhpbbzbn(1, 2); 遇过遇到了 LoadLibrary 返回 ptr 是 0 那么需要调用下面代码 var ptr

68620

C# 如何在项目引用x86 x64非托管代码

因为现在项目使用是 AnyCpu 在 x86 设备使用x86,在x64使用x64,但是对于非托管代码,必须要在x64使用x64dll,在x86使用x86dll。...在C++没有和C#一样 AnyCpu 所以需要在项目运行在x86时候加载x86dll。 本文告诉大家如何在代码引用不同dll。...使用宏 最简单方法是编译两个版本,编译多个版本可以点击配置管理器,然后创建x86x64,然后版本添加宏,这样就可以判断宏来使用不同dll ? 点击活动解决方案平台,然后点击新建 ?..."x64" : "x86"); SetDllDirectory(path); 这样就可以直接写一个函数,最后方法是我推荐。...C++ 方法了,使用下面的代码调用 var n = hfwzsnHzhpbbzbn(1, 2); 遇过遇到了 LoadLibrary 返回 ptr 是 0 那么需要调用下面代码 var ptr

2K10

C# CLR 聊聊对象内存布局 一个空对象占用多少内存

C#对象大概可以分为三个不同类型,包括类型、引用类型和其他类型。本文主要讨论是引用类型对内存空间占用情况。在讨论开始之前我想问问大家,一个空对象会占用多少内存空间?...在 .NET Core 下,在 x86 x86-64 平台储存整数使用是 Little Endian 小端法,而在 ARM ARM64 平台储存整数使用是 Big Endian 大端法。...尝试看一下这个地址 根据x86x64 下是小端显示,也就是 e8 0a 96 60 fc 7f 00 00 需要按照字节反过来写才是十六进制,反过来写是 0x00007ffc60960ae8...复习一下,在 C# 里面无论在 x86 还是 x64 下,每个 int 都占领 4 个字节 如果觉得不够直观,咱修改一下对象创建顺序,请看代码 static void Main(string...尽管这个空间不是我这个对象用,但是其他对象也不用这部分空间 以上是 x64对象内存布局,大概可以认定答案是一个空对象占用了3*8个字节 那么 x86对象如何?

84220

.NET 简介

平台 您可以为许多操作系统创建 .NET 应用程序,包括: 视窗 苹果系统 Linux 安卓 IOS 操作系统 手表操作系统 支持处理器架构包括: x64 x86 ARM32 ARM64 .NET...C# 起源于 C 语言家族,CC++、Java 和 JavaScript 程序员很快就会熟悉 C#。 F# F# 语言支持函数式、面向对象和命令式编程模型。...视觉基础 在 .NET 语言中,Visual Basic 语法是最接近普通人类语言,这使得它更容易学习。微软正在积极开发新功能 C# 和 F# 不同,Visual Basic 语言是稳定。...原生 API 互操作主要方式是通过“平台调用”或简称 P/Invoke。跨 Linux 和 Windows 平台支持 P/Invoke。...一种仅适用于 Windows 互操作方式称为“COM 互操作”,它与托管代码中COM 组件一起使用。它构建在 P/Invoke 基础架构之上,但它工作方式略有不同

1.9K20

C# 基础知识系列- 5 反射和泛型

前言 为什么要把反射和泛型放在一起讲呢,这里是处于个人对C#一个很棒观感,因为C#反射是可以获取泛型里元素,而不像Java一个让我比较难受地方就是Java泛型实际编译时候擦除类型信息。...使用 做标记,中间写类型,表示这是一个泛型为XXX泛型类。通常与其他语言不同地方是,C#泛型支持所有类型,意思就是在没有额外声明时候,可以使用任意类型作为泛型参数传递。...这里简单介绍一下泛型方法使用: 方式1 隐藏了一个泛型参数,这是因为如果泛型是参数的话,c#根据参数类型自动解析对应泛型类型是什么,方式1 等同于TemplateMethod(10);...反射 反射在很多地方都有着使用,这里先简单介绍一下C#反射相关内容,因为细讲的话涉及到很多东西而且还需要很多前置概念,不过在自己写框架之前不需要涉及到太多反射内容。...该方法有个返回,类型是object,如果方法是没有返回方法,那么Invoke返回就是null。

1.5K60

Unity3d底层数据传递分析

为了防止出现这种情况,可以使用C#fixed关键字来单边锁定变量。 在P/Invoke模式中没有使用fixed,而采用另一种常见托管到非托管封送方式: 1. Runtime分配一块非托管内存。...因为不能确定托管堆中内存何时失效,在非托管代码中,我们不应该缓存任何托管代码传进来数据。 另一种情况是返回,类在非托管代码中,不可以作为返回,只可以返回指针。...三 跨域调用 托管代码能通过以下两种方式调用C++,即P/Invoke内部调用(Embedding)。 P/Invoke 使用P/Invoke调用方式,需要将C++函数声明为public。...内部调用 内部调用是在C++中注册调用,并直接访问托管对象,控制Marshall。例如,我们要返回字符串,就先要在C++中显示注册接口。 ? 然后在C#中声明下面的函数: ?...这也是默认标记,即不做从非托管拷贝回托管操作。 2、结构体传递 结构体类有两点不同: 1. 结构体分配在运行时栈上(Runtime Stack)。 2.

1.3K20

Win10 Edge浏览器从越界写到任意内存读写

(x64平台利用实在比x86难太多:( ) 0×0漏洞分析 由于chakra脚本引擎已经开源,所以可以从github上得到此次漏洞修复代码如下(in JavascriptArray.cpp\MapHelper...如图,SetItem是一个虚函数根据调用对象分别调用不同SetItem实现(JavascriptNativeIntArray是JavascriptArray子类)。...在漏洞代码中,假如newArr并不是JavascriptArray对象,而是其子类对象,就会引发越界读漏洞。根据源码分析对比,最终构造测试PoC如下: ?...调用y类constructor函数,也就是fake函数,用于创建newObj对象,也就是Array.prototype.map()函数即将返回对象。...WARP Shader,文章针对x86,在x64上会有比较大难度)。

1.4K70

C语言之精华——指针详解(下)

函数参数和指针」 C 语言中,实参传递给形参,是按传递,也就是说,函数形参是实参拷贝份,形参和实参只是在上面一样,而不是同一个内存数据对象。...,在简单情况下是可以,但是如果返回有其它用途(例如返回函数执行状态量),或者要回传数据不止一个,返回就解决不了了。...而传递变量指针却快很多,因为在同一个平台下,无论什么类型指针大小都是固定X86 指针 4 字节,X64 指针 8 字节,远远比一个 Student 结构体变量小。...既然是存放在内存中,那么函数也是有自己指针C 语言中,函数名作为右时,就是这个函数指针。...是,则返回true,否则返回false //这个方法判别的依据就是:C语言中一个对象地址就是这个对象占用字节中,地址最小那个字节地址。

54230

Unity3d底层数据传递分析

为了防止出现这种情况,可以使用C#fixed关键字来单边锁定变量。 在P/Invoke模式中没有使用fixed,而采用另一种常见托管到非托管封送方式: Runtime分配一块非托管内存。...因为不能确定托管堆中内存何时失效,在非托管代码中,我们不应该缓存任何托管代码传进来数据。 另一种情况是返回,类在非托管代码中,不可以作为返回,只可以返回指针。...关于类结构体,在后面有更详细论述。 三、跨域调用 ------ 托管代码能通过以下两种方式调用C++,即P/Invoke内部调用(Embedding)。...P/Invoke 使用P/Invoke调用方式,需要将C++函数声明为public。...[4.png] 然后在C#中声明下面的函数: [5.png] 最后实现在C++中实现这个函数: [6.png] 通过MonoString和mono_string_new,即完成了字符串Marshalling

3.6K21

在 .NET 应用程序中运行 JavaScript

这并不像听起来那么疯狂,有几个 NuGet 包采用了这种方法,然后暴露出一个 C# 层来引擎进行交互。 下面是你可以使用一些包列表。...它可以在 Linux macOS 和 Windows 上针对 x64 处理器进行编译。而 x86 和 ARM 只适用于 Windows。...因此,ChakraCore 包括一个本地依赖,但由于 C# 可以 P/Invoke 到本地库,这本身并不是一个问题。但它会带来一些部署方面的挑战。...ClearScript 库负责 P/Invoke 调用,提供了一个很好 C# API,但你仍然要确保你在目标平台上部署了正确本地库。...虽然所有的库都允许你运行 JavaScript,但它们都有略微不同 C# API 来之交互。这可能会使比较它们变得有点痛苦,因为你必须为每个库学习不同 API。

2.6K10

Mimikatz获取系统密码攻防研究

,密码便会储存在lsass内存中,经过其wdigest和tspkg两个模块调用后,对其使用可逆算法进行加密并存储在内存之中,而mimikatz正是通过对lsass逆算获取到明文密码!...和x86/shikata_ga_nai,下面生成一个实例(反弹服务器IP为192.168.106.133): msfvenom -p windows/meterpreter/reverse_tcp LHOST...,这时需要记录新登录哈希,可以使用以下命令来记录,记录结果在c:\windows\system32\mimilsa.log。...来获取明文密码,但是一台一台登陆去获取很慢且不方便,所以这里介绍一个批量方法: (1)创建共享文件夹: cd\ mkdir open net share open=C:\open /grant:everyone...1. mimipenguin mimikatzLinux平台仿造版本mimipenguin(由@HunterGregal开发),mimipenguin需要root权限运行,通过检索内存、/etc/shadow

3.5K40

Flare-On 2018 writeup(上)

通过cp()函数判断式推出密码为k9btBW7k2y,根据密码调用js中de()函数得到flag function cp(p) { //get password if (model.passwordEntered...编写watHelper脚本解析函数块,思路是记录指令操作栈影响,然后还原出代码(遇到function call出入栈数量要根据函数类型决定) watHelper部分代码如下 ? ?...在call ram前对stack进行清空,否则有些函数内未对所有局部变量初始化造成和源程序执行结果不同 ? pwntools进行多轮爆破 ? mag!...程序xor和alloc载入dll资源 然后修改cs: 33h执行载入x64 dll中api,由于经过x86x64来回切换需要使用windbg调试 ?...意味着使用到全局变量地方crackme_dll,crack_len需要断点修改实际地址 函数再次alloc并加载crackme.dll,x86 dll,通过结束前覆盖return stack执行到crackme

78540

一文搞定SonarQube接入C#(.NET)代码质量分析

Sonar-Scanner for MSBuild安装配置 1、下载SonarQube Scanner for MSBuild,它是C# FrameworkSonar分析插件。...MSBuild安装配置 Visual Studio IDE在编译*.sln解决方案时默认是调用msbuild.exe来实现。...msbuild.exe路径一般如下: X86: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe X64: C:\Program Files (x86...2、如果遇到需要检测比较大项目,可能上传mysql数据量很大,超出默认mysql上传最大,此时需要设置mysqlmax_allowed_packet。...解决方案 将Sonar插件中C#插件改为5.9版本即可。修改方式将plugin目录下原本C#插件删除掉,将5.9版本插件放入进来。重启SonarQube后问题即可解决。

4.8K31

C++ 多态实现机制

function, 需要用 Base::func(); 这样语法 构成 overridding 条件: 函数名一致 函数参数一致 函数返回一致 (若返回类型具有协变关系, 也是可以, 如下面代码...测试平台配置信息: 系统: Windows 10 编译器: cl (x86)/g++ (x64) 若在 64 位下编译, 需要将所有的 1 改为 2, 2 改为 4 typedef void...(*Fun)(); Animal* a = new Animal(); int* p = (int*)a;//*p 是一个指针, 指向虚函数表 int* q = (int*)*p;//q *p.../*p 是一个指针, 指向虚函数表 int* q = (int*)*p;//q *p 相同, 指向虚函数表第一项 , *q 是函数指针 //调用 Dog::eat(), 等价于 ((void(...这件事情和不同平台, 不同编译器都有关系, 因此只需了解虚函数实现多态原理即可, 不必强求用代码实现.

65840

Antimalware Scan Interface (AMSI)—反恶意软件扫描接口绕过

负责决定是否允许运行脚本函数称为AmsiScanBuffer。『2』 例如,PowerShell将在每次要评估任何PowerShell脚本时调用函数。...以指示该样本不被认为是恶意 从内容EICAR测试文件比较可以看出,当内容被认为是恶意内容时,将返回AMSI_RESULT_DETECTED。...『16』 如果设置了amsiInitFailed字段,则返回AMSI_RESULT_NOT_DETECTED以指示该样本不被认为是恶意 否则,该函数将继续其检测逻辑并调用AmsiScanBuffer...看看RyanCobbDerbyCon演讲。『13』『14』 调用混淆:通用PowerShell混淆器,可以应用几种不同技术并生成独特混淆样本。...这种bypass有多种版本,我将提交最新C#版本嵌入在.ps1脚本中,该版本完全取自解码器powershell。

2.1K20
领券