小编lll*_*lll的帖子

如何在prolog中进行算术运算?

在C中,给出两个这样的数字:

1010
0101
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

0000 == 1010&&0101;
1111 == 1010||0101;
Run Code Online (Sandbox Code Playgroud)

那么是否有可能使用Prolog做同样的事情..?

谢谢!

prolog

3
推荐指数
1
解决办法
87
查看次数

X86 控制流操作中的 BitWiseXorNor 是什么?

维基

test arg1, arg2
Run Code Online (Sandbox Code Playgroud)

我可以看到标志是基于这些改变的:

  1. SF <- MostSignificantBit(Temp)
  2. 如果温度 == 0 ZF <- 1 否则 ZF <- 0
  3. PF <- BitWiseXorNor(Temp[Max-1:0])
  4. CF <- 0
  5. OF <- 0

AF 未定义

所以我的问题是:

什么是BitWiseXorNor?什么是最大

x86 assembly control-flow

3
推荐指数
1
解决办法
149
查看次数

这种模式匹配在 OCaml 中并不详尽

我是 OCaml 的新手,我写了一些代码来获取列表的 n 元素

let rec n_elem l n = match n with
| 0 -> match l with
    | h::_ -> h
    | _ -> failwith "erorr with empty list"
| _ -> match l with
    | h::t -> n_elem t (n-1)
    | _ -> failwith "erorr with empty list"
;;
Run Code Online (Sandbox Code Playgroud)

当我使用ocaml解释器运行它时,警告生成为:

Warning 8: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
1
Warning 11: this match case …
Run Code Online (Sandbox Code Playgroud)

ocaml

3
推荐指数
1
解决办法
3243
查看次数

我可以将"Objdump -S -d elf-file"生成的所有部分组合成一个具有重新组装功能的文件吗?

elf文件是静态链接的

目前objdump的输出是这样的:

Disassembly of section: .init:

xxxxxx

Disassembly of section: .plt:

xxxxxx

Disassembly of section: .text:

xxxxxx
Run Code Online (Sandbox Code Playgroud)

基本上我想要实现的是

"elf-file - (通过objdump反汇编) - >汇编文件 - (重新编译) - > 相同的功能 "

我不需要重新编译的二进制文件具有与原始二进制文件相同的二进制内容,只有相同的功能就足够了.

经过快速搜索,基本上答案是否定的,他们认为反汇编文件丢失了一些像符号信息或其他东西,但我认为通过静态链接,我可以摆脱这个问题......

谢谢!

assembly reverse-engineering elf objdump disassembly

2
推荐指数
1
解决办法
1703
查看次数

为什么反汇编代码中有一些"无意义"的内存插槽?

我使用objdump在32位Linux上反汇编一些ELF文件.

asm文件采用Intel格式.

在反汇编文件中,我注意到一些内存插槽如下:

80483ed:       c7 44 24 18 07 00 00    mov    DWORD PTR [esp+0x18],0x7
80483f4:       00
80483f5:       c7 44 24 1c 0c 00 00    mov    DWORD PTR [esp+0x1c],0xc
80483fc:       00
80483fd:       c7 44 24 20 01 00 00    mov    DWORD PTR [esp+0x20],0x1
8048404:       00
8048405:       c7 44 24 24 fe ff ff    mov    DWORD PTR [esp+0x24],0xfffffffe
804840c:       ff
Run Code Online (Sandbox Code Playgroud)

原始的汇编文件是:

mov     DWORD PTR [esp+24], 7
mov     DWORD PTR [esp+28], 12
mov     DWORD PTR [esp+32], 1
mov     DWORD PTR [esp+36], -2 …
Run Code Online (Sandbox Code Playgroud)

linux assembly memory-management memory-alignment disassembly

2
推荐指数
1
解决办法
74
查看次数

如何在elf文件中获取用户定义的函数范围(开始和结束地址)?

我知道我们可以通过读取符号表来获取elf中用户定义函数的开始地址,如下所示,函数main和foo:

08048330 T _start
0804a014 b completed.6159
0804a00c W data_start
0804a018 b dtor_idx.6161
080483e4 T foo
080483c0 t frame_dummy
080483ee T main
Run Code Online (Sandbox Code Playgroud)

但如何获得某些功能的结束地址?

谁能给我一些帮助?谢谢!

linux elf disassembly symbol-table

2
推荐指数
1
解决办法
672
查看次数

为什么"讨论"要求很重要?

我正在读这个OCaml走过幻灯片,我在这里找到一个有趣的问题:

在此输入图像描述

似乎oops函数会生成编译错误:

the type of this expression contains type variables that cannot be generalized
Run Code Online (Sandbox Code Playgroud)

我不知道原因所以我在我的Mac上使用OCaml版本4.01.0快速对此功能进行了一些测试,令我惊讶的是,在解释此代码时我没有看到任何错误

我不知道为什么幻灯片因为currying而声称它是一个错误,我无法重新创建此错误...

谁能给我一些帮助?

ocaml currying

2
推荐指数
1
解决办法
134
查看次数

无法将Rcpp :: sugar :: Plus_Vector_Primitive转换为Rcpp :: traits :: storage_type

我基本上是想将一些R代码转换为cppusing Rcpp。我在下面的代码中遇到以下错误:

error: cannot convert ‘Rcpp::sugar::Plus_Vector_Primitive<14, true, Rcpp::stats::D2<14, true, Rcpp::Vector<14, Rcpp::PreserveStorage> > >’ to ‘Rcpp::traits::storage_type<14>::type {aka double}’ in assignment
Run Code Online (Sandbox Code Playgroud)

这是代码

 #include <RcppArmadillo.h>
#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export(".loop_exp")]]
void mm_mult(const arma::vec& helpa, const arma::mat& helpb, const arma::vec& helpc,
             const Rcpp::NumericVector& t1, const arma::vec& t2, int J, Rcpp::NumericVector& prob)
{
  int j;
  for (j = 1; J <= J; j++)
  {
    arma::mat t = (helpb.row(j)).t() * (t2);
    double tt = t[0,0];
    prob[j] = …
Run Code Online (Sandbox Code Playgroud)

r armadillo rcpp

2
推荐指数
1
解决办法
392
查看次数

x86 sbb,其寄存器与第一个和第二个操作数相同

我正在分析一系列x86指令,并对以下代码感到困惑:

135328495: sbb edx, edx
135328497: neg edx
135328499: test edx, edx
135328503: jz 0x810f31c
Run Code Online (Sandbox Code Playgroud)

我了解这sbb相当于以des = des - (src + CF)某种方式-CF输入的第一条指令edx。然后它negtive -CF变成CFtest是否CF等于零?

但是请注意,不要jz检查标志!那么上述代码序列基本上想做什么?这是合法的指令序列,由version 产生。ZFCFx86g++4.6.3

C++代码实际上来自botan项目。您可以在此处找到总体汇编代码(Botan RSA解密示例)。反汇编代码中有很多这样的指令序列。

x86 assembly flags intel cpu-registers

2
推荐指数
1
解决办法
1635
查看次数

了解Rust中的智能指针

我是Rust的新手,并且写作以了解Rust中的“智能指针”。我对智能指针在C ++中的工作方式有基本的了解,并且自几年前以来就一直将其用于内存管理。但是令我非常惊讶的是,Rust也明确提供了这样的实用程序。

因为在这里的教程(https://pcwalton.github.io/2013/03/18/an-overview-of-memory-management-in-rust.html)中,似乎每个原始指针都自动包装了一个智能指针,这似乎非常合理。那么,为什么我们仍然需要这样Box<T>Rc<T>Ref<T>东西?根据此规范:https : //doc.rust-lang.org/book/ch15-00-smart-pointers.html

任何评论将被感动很多。谢谢。

smart-pointers rust

1
推荐指数
1
解决办法
644
查看次数