- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Hex-Rays 反编译了一些 dll,然后尝试将其再次编译为 MATLAB MEX。由于 Hex 将 double * 反编译为 int 并且我使用的是 win 7 64 我类型转换双 * 使用 uintptr_t。不幸的是,有时我会遇到“段错误”。
这是我的代码
#include "mex.h"
#include <stdint.h>
double __stdcall dzSell(int a1, double a2, int a3, int a4, int a5)
{
int v5; // ecx@1
double v6; // st7@3
double result; // st7@4
int v8; // ebp@5
double v9; // st6@5
double v10; // st5@5
int v11; // edx@5
int v12; // esi@6
int v13; // ecx@6
double v14; // rt0@10
double v15; // st5@10
double v16; // st6@10
double v17; // rt1@12
double v18; // rt2@15
double v19; // st5@15
double v20; // st6@15
double v21; // rtt@17
double v22; // rt0@20
double v23; // st5@20
double v24; // st6@20
double v25; // rt1@22
double v26; // rt2@25
double v27; // st5@25
double v28; // st6@25
double v29; // rtt@27
int v30; // esi@29
int v31; // ecx@29
double v32; // rt0@33
double v33; // st5@33
double v34; // st6@33
double v35; // rt1@35
signed int v36; // edi@36
double v37; // st3@36
double v38; // st4@36
double v39; // st2@37
double v40; // st2@38
double v41; // rt1@38
double v42; // st2@38
double v43; // rt2@38
signed int v44; // esi@40
double v45; // st1@40
int v46; // edx@41
int v47; // ecx@41
double v48; // rt0@43
double v49; // st1@43
double v50; // st4@43
double v51; // rtt@45
double v52; // st5@47
double v53; // st3@47
double v54; // rtt@48
double v55; // rt1@48
double v56; // st3@48
double v57; // rt2@48
double v58; // [sp+4h] [bp-8h]@3
int v59; // [sp+20h] [bp+14h]@1
int v60; // [sp+20h] [bp+14h]@5
v5 = a4 - a5;
v59 = a4 - a5;
if ( v59 >= a3 )
v59 = a3;
v6 = (double)v59;
v58 = v6;
if ( v6 >= 1.0 )
{
v8 = v5 - 1;
v9 = *(double *)(a1 + 8 * (v5 - 1));
v10 = v9;
v60 = a1 + 8 * (v5 - 1);
v11 = 1;
if ( a3 - 1 < 4 )
{
LABEL_28:
if ( v11 < a3 )
{
v30 = v8 - v11;
v31 = a1 + 8 * (v8 - v11);
do
{
if ( v30 < 0 )
break;
if ( v10 < *(double *)v31 )
v10 = *(double *)v31;
v32 = v10;
v33 = v9;
v34 = v32;
if ( v33 > *(double *)v31 )
v33 = *(double *)v31;
++v11;
v35 = v33;
v10 = v34;
v9 = v35;
v31 -= 8;
--v30;
}
while ( v11 < a3 );
}
}
else
{
v12 = v5 - 4;
v13 = a1 + 8 * (v5 - 4);
while ( v12 + 2 >= 0 )
{
if ( v10 < *(double *)(v13 + 16) )
v10 = *(double *)(v13 + 16);
v14 = v10;
v15 = v9;
v16 = v14;
if ( v15 > *(double *)(v13 + 16) )
v15 = *(double *)(v13 + 16);
v17 = v15;
v10 = v16;
v9 = v17;
if ( v12 + 1 < 0 )
break;
if ( v10 < *(double *)(v13 + 8) )
v10 = *(double *)(v13 + 8);
v18 = v10;
v19 = v9;
v20 = v18;
if ( v19 > *(double *)(v13 + 8) )
v19 = *(double *)(v13 + 8);
v21 = v19;
v10 = v20;
v9 = v21;
if ( v12 < 0 )
break;
if ( v10 < *(double *)v13 )
v10 = *(double *)v13;
v22 = v10;
v23 = v9;
v24 = v22;
if ( v23 > *(double *)v13 )
v23 = *(double *)v13;
v25 = v23;
v10 = v24;
v9 = v25;
if ( v12 - 1 < 0 )
break;
if ( v10 < *(double *)(v13 - 8) )
v10 = *(double *)(v13 - 8);
v26 = v10;
v27 = v9;
v28 = v26;
if ( v27 > *(double *)(v13 - 8) )
v27 = *(double *)(v13 - 8);
v11 += 4;
v29 = v27;
v10 = v28;
v9 = v29;
v13 -= 32;
v12 -= 4;
if ( v11 >= a3 - 3 )
goto LABEL_28;
}
}
v36 = 50;
v37 = 0.5;
v38 = (v10 + v9) * 0.5;
if ( v38 - v9 <= 0.005 )
{
result = v38;
}
else
{
v39 = 0.0;
while ( v36 > 0 )
{
v44 = 0;
v45 = v39;
if ( v39 < v6 )
{
v46 = v60;
v47 = v8;
do
{
if ( v47 < 0 )
break;
v48 = v45;
v49 = v38;
v50 = v48;
if ( v49 < *(double *)v46 )
v39 = v39 + 1.0;
++v44;
v46 -= 8;
--v47;
v51 = v49;
v45 = v50;
v38 = v51;
}
while ( (double)v44 < v6 );
}
if ( a2 - 0.001 <= v39 / v6 )
{
v54 = (v38 + v10) * v37;
v9 = v38;
v55 = v37;
v56 = v10;
v52 = v55;
v57 = v56;
v53 = v54;
v38 = v57;
}
else
{
v52 = v37;
v53 = (v38 + v9) * v37;
}
--v36;
if ( v53 - v9 <= 0.005 )
return v53;
v6 = v58;
v40 = v52;
v10 = v38;
v41 = v40;
v42 = v53;
v37 = v41;
v43 = v42;
v39 = v45;
v38 = v43;
}
result = v38;
}
}
else
{
result = 2147483647.0;
}
return result;
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
double *buffer;
double Probability;
int DzLookBackBars;
int Bars;
int i;
double result;
// Check inputs
if (nrhs != 5) {//if the user has given anything but one arg, then error
mexErrMsgIdAndTxt("Numerical:myGetPr:nrhs", "Require 5 args");
}
if (!mxIsNumeric(prhs[0])) {//if input is not numeric (for example a string), then errror
mexErrMsgIdAndTxt("Numerical:myGetPr:isnumeric", "Require args that is numeric");
}
if(nlhs!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs","One output required.");
}
/* make sure the first input argument is type double */
if( !mxIsDouble(prhs[0]) ||
mxIsComplex(prhs[0])) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:notDouble","Input matrix must be type double.");
}
// Check output
int dims[] = {1,1}; //dimensions of output
buffer = mxGetPr(prhs[0]);
Probability = mxGetScalar(prhs[1]);
DzLookBackBars = mxGetScalar(prhs[2]);
Bars = mxGetScalar(prhs[3]);
i = mxGetScalar(prhs[4]);
result = dzSell ((uintptr_t)buffer, Probability, DzLookBackBars, Bars, i);
plhs[0] = mxCreateDoubleScalar(result);
}
这里是证明转换错误的屏幕
知道如何处理吗???
Hex-Rays反编译数组的例子在这里
Hex-Rays decompiles array to int
这里是反汇编文件
http://www.mediafire.com/view/w82l6somwr7o450/dissasembly.txt
克日什托夫
最佳答案
将反编译器视为让您领先一步,而不是生成好的代码。
特别是,它创建的代码根本不可移植。为了能够针对不同的指针大小进行编译,您需要修复类型信息。
关于c++ - Hex-rays、MATLAB、MEX、转换 uintptr_t 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35144284/
我在使用以下代码时遇到问题: function http_file_exists($url){ $f=fopen($url,"r"); if($f){ fclose($f); retu
我已经通过 Git 部署到 Azure 几个月了,没有出现重大问题,但现在我似乎遇到了一个无法克服的错误。 我创建了一个新的 Azure 网站,为正在开发的项目创建单独的预览链接。我在新站点上设置了
我已经通过flutter创建了一个App并完成了它,我想在flutter文档中阅读时进行部署。 我收到此错误: FAILURE: Build failed with an exception. * W
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
我正在尝试使用 RapidJSON 解析从服务器接收到的数据。以下是收到的确切字符串: [ { "Node": "9478149a08f9", "Address": "172.17
我尝试为 ios 编译 OpenCV。我总是收到这些错误。我用不同版本的opencv试了一下,结果都是一样的。 我运行这个:python 平台/ios/build_framework.py ios_o
我在一台机器上做基本的发布/订阅,我的客户端是 StackExchange-Redis 的 C# 客户端,我在同一台机器上运行基于 Windows 的 Redis 服务器(服务器版本 2.8.4) 当
我有这段代码,但无法执行,请帮我解决这个问题 连接 connect_error) { die ("connection failed: " . $terhubung->connect_erro
我在 tomcat 上运行并由 maven 编译的 Web 应用程序给出了以下警告和错误。我可以在本地存储库中看到所有 JAR,但有人可以帮忙吗。 WARNING: Failed to scan JA
我正在 Windows 8 上使用 Android Studio 开发一个 android 应用程序,我正在使用一些 native 代码。突然间我无法编译我的 C 文件。当我运行 ndk-build
下面的代码对类和结构的成员进行序列化和反序列化。序列化工作正常,但我在尝试使用 oarch >> BOOST_SERIALIZATION_NVP(outObj); 反序列化时遇到了以下错误; 代码中是
如果我运行此命令“rspec ./spec/requests/api/v1/password_reset_request_spec.rb”,此文件中的所有测试都会通过。 但是,当我运行“rspec”时
我在尝试执行测试以使用 Protractor 上传文件时出错,我的代码是这个 it('it should be possible to upload a file', function() {
System.loadLibrary("nativefaceswap"); 当我运行我的应用程序时,我在 Android Studio 中发现了此类错误。在logcat中显示: java.lang.U
我希望有人能帮助我!使用任何方法或命令行的任何 SSL/HTTPS 调用均无效。 我在 Windows 10 中使用 Ubuntu Server 18.04 作为子系统。我的问题是昨天才开始出现的,因
通过删除这两个值将日期字段从 null=True 和 Blank=True 更改为 required 时,使用 db.alter 命令时遇到问题。 当以下行被注释掉时,迁移运行不会出现问题。
我第一次使用 Heroku 尝试创建应用程序(使用 SendGrid 的 Inbound Parse Webhook"和 Twilio SMS 通过电子邮件发送和接收 SMS 消息)。通过 Virtu
我正在将我的 swift 项目更新到 Xcode 7 上的 Swift 2.0。xcode 在构建项目时报告了以下错误: 命令/Applications/Xcode.app/Contents/Deve
在我的代码中,SSL 库函数 SSL_library_init() 没有按预期返回 1。我如何才能看到它返回了什么错误? 我在 SSL_library_init() 之后调用了 SSL_load_er
我正在尝试运行在以下链接中找到的答案: Asynchronously Load the Contents of a Div 但是当我这样做时,我会遇到我不太理解的错误。 我的代码: $(documen
我是一名优秀的程序员,十分优秀!