小编use*_*100的帖子

gsm网卡端口映射与python中的udp套接字

我有一个python服务器侦听udp数据包并回复发送者.在客户端中,我在同一端口创建连接回服务器.客户端在gsm网络上工作,他们的ip不是公共的,所以网络完成了一些端口映射,所以服务器可以联系回来,我想.

会发生的情况是,有时端口映射必须遇到一些问题,因为打开的套接字仍然能够与客户端 - >服务器通信,但不能反过来.

它达到了一个点,我有两个客户端具有相同的对(IP,地址).在服务器中,当我使用sock.recvfrom从他们接收消息时,我清楚地知道消息来自两个不同的客户端,考虑到他们的内容,但地址是相同的.

我在服务器上放了一个nc -l并在每个客户端上运行nc,并清楚两个gsm卡共享相同的外部ip,所以最后一个打开端口,得到它的映射,旧的正在工作,假设它仍然有映射(不再有它).

我没有制作我正在使用的原始代码所以我无法解释为什么特定的给定端口用于客户端到达服务器,但在我看来,即使使用随机端口,问题仍将存在,因为网络在一段时间后重新映射端口(我想它应该是在某些事件之后,如gsm信号丢失).

任何人都知道我该怎么做才能避免这种情况?

python sockets networking udp gsm

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

在汇编和c ++中混淆堆栈

我想做以下事情:

我有一个不是我的功能(这里真的没关系,只是说我无法控制它)而且我想修补它以便它调用我的函数,保留参数列表(跳跃不是一种选择).

我正在尝试做的是,在调用该函数之前将堆栈指针放在原来的状态,然后调用我的(就像回去再做同样的事情,但是使用不同的函数).这不起作用,因为堆栈变得混乱.我相信当我进行呼叫时它会替换返回地址.所以,我做了一个步骤来保存返回地址,将它保存在一个全局变量中它可以工作,但这不行,因为我希望它抵制recursitivy,你知道我的意思.无论如何,我是集会的新手,这就是我在这里的原因.

请不要告诉我有关已经制作软件的事情,因为我想以自己的方式做事.

当然,这段代码必须独立于编译器和优化.

我的代码(如果它比可接受的大,请告诉我如何发布):

// A function that is not mine but to which I have access and want to patch so that it calls a function of mine with its original arguments
void real(int a,int b,int c,int d)
{

}

// A function that I want to be called, receiving the original arguments
void receiver(int a,int b,int c,int d)
{
 printf("Arguments %d %d %d %d\n",a,b,c,d);
}

long helper;

// A patch to apply in the "real" function …
Run Code Online (Sandbox Code Playgroud)

assembly hook

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

阅读记忆保护

我想知道linux是否有一种检索内存保护的方法.就像,我希望恢复使用mprotect更改后存在的保护.

memory

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

在c#,c ++和java中创建python弱类型结构的强类型版本

在python我有以下内容:

graph = {}

graph[1] = {}
graph[2] = {}
graph[3] = {}

graph[1][3] = graph[3]

graph[2][1] = graph[1]
graph[2][3] = graph[3]

graph[3][2] = graph[2]
Run Code Online (Sandbox Code Playgroud)

这是一个表示图形的结构,我发现它很好,因为它的结构与其中一个节点的结构相同,因此我可以直接使用它来启动搜索(如深度优先).它的印刷版本是:

{1: {3: {2: {1: {...}, 3: {...}}}}, 2: {1: {3: {2: {...}}}, 3: {2: {...}}}, 3: {
2: {1: {3: {...}}, 3: {...}}}}
Run Code Online (Sandbox Code Playgroud)

它可以像:

graph[1][3][2][3][2][1][3][2][1][3][2].keys()
Run Code Online (Sandbox Code Playgroud)

现在,我很想知道如何用C++,C#和Java实现它,而不需要使用"对象"技巧来填充丑陋的演员阵容.对于C++,我在思考模板编程,但是当需要的东西就是这样的时候会产生"有限的数据类型"

map<int,map<int,...>> or map<int,...>
Run Code Online (Sandbox Code Playgroud)

c# c++ python java strong-typing

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

虚函数表偏移量

我想问一下,类的虚函数表的偏移量取决于什么?我的意思是,从我读到的内容来看,它至少取决于编译器,但它是否因类而异?

编辑:通过偏移,我的意思是表相对于所有者对象的地址的位置。

编辑:示例代码:

void **vtable = *((void***)(((char*)object)+offset));

int **ivtable=(int **)vtable;

void* firstFunction = (void*) ivtable[0];
Run Code Online (Sandbox Code Playgroud)

c++ virtual function

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

禁用反应原生白屏

当应用程序以某种方式崩溃时,我们希望禁用经典的白屏。我们正在使用 react-native-exception-handler 模块,它捕获了一些错误,但不是全部。当我们发现这些错误时,我们会通知自己并重新启动应用程序。但有时会出现一些错误(例如,当应用程序从服务器接收到一些它不期望的数据时),会触发白屏。我们希望我们的客户保持应用程序冻结或通知他们必须重新启动应用程序,而不是“随机”白屏。可以做到吗?

react-native

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

创建std :: maps的递归std :: map

我想知道做这样的事情的最佳方式或更好的方法:

template <int N,typename T,typename X>
class MyMap : public map<T,MyMap<N-1,T,X>>{};

template <typename T,typename X>
class MyMap<1,T,X> : public map<T,X>{};

int main(int argc, char* argv[])
{
    MyMap<4,string,double> myMap;

    myMap["a"]["b"]["c"]["d"] = 123.456;

    cout << myMap["a"]["b"]["c"]["d"];

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ template-meta-programming

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

获取使用内联汇编调用我的函数的函数的地址

我想知道如何检索使用内联汇编调用我的函数的函数的地址.我的想法是将地址发送到调用我的函数将返回的位置并使用前面的指令(这是对调用我的函数的调用)检索调用我的函数的地址添加到给定的偏移量调用,到下一条指令的地址(调用我的函数将返回的地址).到目前为止,我能够做到这一点,但要获得我的地址.它非常简单,有效:

_asm
{
    mov eax, [ebp+4]
    mov returnTo,eax
}

long addressOfMine = (*((long*)(returnTo - sizeof(long)))) + returnTo)
Run Code Online (Sandbox Code Playgroud)

这检索我的地址就好了.(通过知道[ebp + 4]是我将返回的地址)

为了做同样的但是上面一步,我试图获得旧的ebp并做同样的事情.我在一个网站上看到[ebp + 0]是旧的ebp所以我试过了:

_asm
{ 
    mov eax, [ebp]
    mov ebx, [eax+4]
    mov returnTo,ebx
}

long addressOfCaller = (*((long*)(returnTo - sizeof(long)))) + returnTo)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.所以,我的假设是错误的,或者我做错了所以我想请求你的帮助.

c++ inline-assembly

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