我的代码中有这个代码段
void jmp_esp()
{
__asm__("jmp *%esp");
}
Run Code Online (Sandbox Code Playgroud)
用gcc编译时
gcc aslr.c -o aslr -ggdb -fno-stack-protector -z execstack
Run Code Online (Sandbox Code Playgroud)
我收到这个错误.
aslr.c: Assembler messages:
aslr.c:6: Error: operand type mismatch for `jmp'
Run Code Online (Sandbox Code Playgroud)
尽管汇编指令有效,为什么这行无法编译?
我读过有关DEP(数据执行预防)的文章.可能是这个功能正在创建这个编译错误?如果是的话,如何禁用它?
是否可以创建/删除Windows用户帐户并设置其权限,使其使用Java代码成为管理员帐户,简单用户帐户或来宾帐户?
我正在学习如何在以后实现线程安全的单例模式c++11.
#include <iostream>
#include <memory>
#include <mutex>
class Singleton
{
public:
static Singleton& get_instance();
void print();
private:
static std::unique_ptr<Singleton> m_instance;
static std::once_flag m_onceFlag;
Singleton(){};
Singleton(const Singleton& src);
Singleton& operator=(const Singleton& rhs);
};
std::unique_ptr<Singleton> Singleton::m_instance = nullptr;
std::once_flag Singleton::m_onceFlag;
Singleton& Singleton::get_instance(){
std::call_once(m_onceFlag, [](){m_instance.reset(new Singleton());});
return *m_instance.get();
};
void Singleton::print(){
std::cout << "Something" << std::endl;
}
int main(int argc, char const *argv[])
{
Singleton::get_instance().print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码编译很好,但在执行时我收到以下异常.
terminate called after throwing an instance of 'std::system_error'
what(): Unknown error -1 …Run Code Online (Sandbox Code Playgroud)