小编小太郎*_*小太郎的帖子

NtCreateProcess和ZwCreateProcess有什么区别?

NtCreateProcess和ZwCreateProcess有什么区别?在ntdll.dll中,NtCreateProcess和ZwCreateProcess都指向完全相同的地址

native

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

zlib是否允许从文件中间解压缩

zlib是否允许从文件中间解压缩?
我的意思是,如果我inflate使用指向压缩数据中间的流调用而不调用inflate中间的数据,它会起作用吗?

c zlib

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

x86后x86 jnz?

在使用IDA Pro反汇编x86 dll之后,我发现了这段代码(我在pusedo-c代码中添加了注释.我希望它们是正确的):

test    ebx, ebx        ; if (ebx == false)
jz      short loc_6385A34B ; Jump to 0x6385a34b
mov     eax, [ebx+84h]  ; eax = *(ebx+0x84)
mov     ecx, [esi+84h]  ; ecx = *(esi+0x84)
mov     al, [eax+30h]   ; al = *(*(ebx+0x84)+0x30)
xor     al, [ecx+30h]   ; al = al XOR *(*(esi+0x84)+0x30)
jnz     loc_6385A453
Run Code Online (Sandbox Code Playgroud)

让我们更容易理解:

mov     eax, b3h
xor     eax, d6h
jnz     ...
Run Code Online (Sandbox Code Playgroud)

在xor指令之后,条件跳转指令如何工作?

x86 assembly conditional xor ida

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

是否可以"添加"到默认的复制构造函数?

是否可以"添加"到默认的复制构造函数?

例如.对于这堂课:

class A
{
    public:
        int a;
        int* b;
};
Run Code Online (Sandbox Code Playgroud)

我想写

A::A(const A& rvalue):
    a(rvalue.a),
    b(new int(*(rvalue.b)))
{}
Run Code Online (Sandbox Code Playgroud)

没有a(rvalue.a)部分.

(忽略糟糕/丑陋的代码和可能的内存泄漏)

c++ copy-constructor

5
推荐指数
2
解决办法
617
查看次数

std::string not nothrow move 可分配或可比较?

我在玩弄type_traits,我发现了这个奇怪的属性std::string

$ cat a.cpp
#include <string>
#include <type_traits>

static_assert(std::is_nothrow_move_assignable<std::string>::value, "???");
static_assert(noexcept(std::declval<std::string>() == std::declval<std::string>()), "???");
$ g++ -std=c++14 a.cpp
a.cpp:4:1: error: static assertion failed: ???
 static_assert(std::is_nothrow_move_assignable<std::string>::value, "???");
 ^
a.cpp:5:1: error: static assertion failed: ???
 static_assert(noexcept(std::declval<std::string>() == std::declval<std::string>()), "???");
 ^
$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609
Run Code Online (Sandbox Code Playgroud)

然而 cppreference 声称移动赋值运算符比较运算符被标记为noexcept

难道我做错了什么?这是一个错误吗?

c++ type-traits

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

“&amp;0xFFFFFFFF”在这个 HIDWORD 宏中有什么作用

我需要为我正在制作的程序使用 HIDWORD 宏,并在这里找到了这个:http ://gnuwin32.sourceforge.net/compile.html

我很困惑的是为什么&0xFFFFFFFF在它的末尾有一个?

#define HIDWORD(l) ((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))
Run Code Online (Sandbox Code Playgroud)

这如何以任何方式修改此宏的输出?

c++ macros dword

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

+ =在没有增强的矢量上

有没有办法在不使用boost或使用派生类的情况下将+ =运算符与向量一起使用?

例如.

somevector += 1, 2, 3, 4, 5, 6, 7;
Run Code Online (Sandbox Code Playgroud)

实际上是

somevector.push_back(1);
somevector.push_back(2);
somevector.push_back(3);
etc.
Run Code Online (Sandbox Code Playgroud)

c++ boost stl vector operator-overloading

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

如何使用 AT&amp;T 汇编语法添加 `SS:` 或 `ES:`

如何在不添加 a或 的情况下添加a SS:orES:使用 AT&T 汇编语法?.byte 0x36.byte 0x26

IE。我如何能够在mov dword ptr ss:[esp+0x10], offset foo不使用以下内容的情况下从 Intel 语法转换为 AT&T:

.byte   0x36
movl    $foo, 0x10(%esp)
Run Code Online (Sandbox Code Playgroud)

我试过movl $foo, %ss:0x10(%esp)在没有警告的情况下组装,但是,通过二进制文件,仍然没有添加SS:

x86 assembly att memory-segmentation

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

访问64位整数的下半部分

如何使用C或C++访问64位整数的下半部分?我可以在汇编中轻松完成,但我不知道如何在C/C++中完成它

编辑:访问上半部分怎么样?

c 64-bit integer

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

集如何区分对象?

集如何区分Java和C++中的对象?或者根本没有区分它们?

以这些为例:
C++

std::set<A> aset;
A a(1, 2); // Assume A has only two elements, and this constructor sets them both
aset.insert(a);
A a2(1, 2); // This would initialise a `A' object to the same values as `a', but a different object
aset.count(a2); // Would this return 1 or 0?
Run Code Online (Sandbox Code Playgroud)

Java的

set<A> aset;
A a = new A(1, 2); // Assume A has only two elements, and this constructor sets them both
aset.add(a);
A a2 = new A(1, 2); // …
Run Code Online (Sandbox Code Playgroud)

c++ java set

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