我有一个非常难以解决的问题:假设我有一个任意指令指针.我需要找出该指令指针是否驻留在特定函数中(让我们称之为"Foo").
一种方法是尝试找到函数的开始和结束边界,并查看IP是否位于其中.起始界很容易找到:
void *start = &Foo;
问题是,我不知道如何获取函数的结束地址(或函数的"长",以汇编的字节为单位).
有没有人有任何想法如何获得一个函数的"长度",或完全不同的方式这样做?
假设函数中没有SEH或C++异常处理.另请注意,我在win32平台上,并且可以完全访问win32 api.
拇指2组装的模拟器有这样的东西吗?我想编写简单的ARM Thumb-2汇编程序并测试它们而不需要使用实际的ARM设备,所以我唯一的选择是仿真.
我的目标是在thumb-2汇编中实现相当数量的算法作为学习练习.我甚至不需要模拟其他硬件(例如io/display/etc).只是能够运行thumb-2程序集(编译与否)并查看结果(即,基本上能够调试程序并在程序完成后查看模拟内存的内容).
有这样的事情存在,还是我抓住稻草?
在我的win8(winrt,c#)应用程序中,我需要调用一个具有非常特定限制的Web API:每2秒不再调用一次Web服务.
我试图强制执行此限制,如下所示:
class Client
{
const int Delay = 2000;
HttpClient m_client = new HttpClient();
int m_ticks = 0;
public async Task<string> Get(string url)
{
// Multiple threads could be calling, I need to protect access to m_ticks:
string result = null;
lock (this)
{
int ticks = Environment.TickCount - m_ticks;
if (ticks < Delay)
await Task.Delay(Delay - ticks);
result = await m_client.GetStringAsync(url);
m_ticks = Environment.TickCount;
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
这让我陷入了困境:
我怎么会这样写这样的东西?
我正在尝试使用STL来解决以下问题(如果我不需要,我不想实现自己的数据结构).我想出了一个有效的实现,但是我希望有更快的东西...或者我有哪些代码可以做到最好?
我有一个大型数据集,其中每个条目包含两个项目:一个键和一个大小.数据集中有多个条目具有相同的密钥.我需要知道的是:对于每个密钥,数据集中有多少个密钥,每个密钥的总大小是多少.例如,给定此数据集(键,大小):
(1, 3)
(3, 27)
(7, 7)
(3, 2)
(1, 1)
Run Code Online (Sandbox Code Playgroud)
我想生成此输出,按大小升序排序:
Key 1: Size 4, Count 2
Key 7: Size 7, Count 1
Key 3: Size 29, Count 2
Run Code Online (Sandbox Code Playgroud)
由于数据集完全未排序,我首先需要聚合键来计算它们并总结大小.然后我需要通过总大小来求助该数据结构以产生最终输出.这是我用std :: map和std :: vector完成任务的代码:
struct Node
{
int Size;
int Count;
Node()
: Size(0), Count(0)
{
}
Node(int size)
: Size(size), Count(1)
{
}
};
void map_insert(std::map<int, Node> &map, int key, int size)
{
std::map<int, Node>::iterator itr = map.find(key);
if (itr != map.end())
{
itr->second.Count++;
itr->second.Size += size; …Run Code Online (Sandbox Code Playgroud) 我正在尝试在C++/CLI中围绕.Net库创建一个本机包装器,以便常规C++代码可以使用它.对于这个例子,假设这是我试图包装的C#代码:
class Foo
{
public Bar GetBar() {...}
public string SomeProperty { get; set; }
}
class Bar
{
public void Baz() {...}
}
Run Code Online (Sandbox Code Playgroud)
我基本上是在C++/CLI(dll项目)中大致尝试这样做:
class __declspec(dllexport) NativeFoo
{
public:
NativeBar GetBar();
std::string GetName();
void SetName(const std::string &value);
private:
Foo ^m_foo;
};
class __declspec(dllexport) NativeBar
{
friend class NativeFoo;
public:
void Baz();
private:
Bar(Bar ^bar);
Bar ^m_bar;
};
Run Code Online (Sandbox Code Playgroud)
这样,C++库可以链接到这个,使用NativeFoo就好像它是一个普通的C++类.在内部,NativeFoo将转换参数以将实现传递给m_foo,将任何管理的内容编组回本机表示并将其返回给其调用者...
但是,我遇到的问题是我不能拥有非托管类的托管成员:
error C3265: cannot declare a managed 'm_bar' in an unmanaged 'NativeFoo'
Run Code Online (Sandbox Code Playgroud)
类似地,我不能将NativeFoo标记为"ref"(作为托管类本身)因为那时我无法导出它:
C3386: 'NativeFoo' : __declspec(dllexport)/__declspec(dllimport) cannot be applied to …Run Code Online (Sandbox Code Playgroud) c++ ×2
arm ×1
async-await ×1
asynchronous ×1
c ×1
c# ×1
c++-cli ×1
emulation ×1
httpclient ×1
stl ×1