标签: linux

绕行和GCC内联汇编(Linux)

我正在为一个为(我们)modders提供API的游戏编程扩展.这个API提供了各种各样的东西,但它有一个限制.API仅用于"引擎",这意味着基于引擎发布的所有修改(mod)都不提供/具有任何类型的(特定于mod)API.我创建了一个'签名扫描程序'(注意:我的插件是作为共享库加载的,用-share&-fPIC编译),它找到了感兴趣的函数(这很简单,因为我在linux上).所以要解释一下,我将采取一个具体的案例:我已经找到了一个感兴趣的函数的地址,它的函数头很简单int * InstallRules(void);.它不需要任何东西(void)并返回一个整数指针(对我感兴趣的对象).现在,我想要做的是创建一个绕行(并记住我有函数的起始地址),对我自己的函数,我想表现如下:

void MyInstallRules(void)
{
    if(PreHook() == block) // <-- First a 'pre' hook which can block the function
        return;
    int * val = InstallRules(); // <-- Call original function
    PostHook(val); // <-- Call post hook, if interest of original functions return value
}
Run Code Online (Sandbox Code Playgroud)

现在这是交易; 我没有任何关于功能挂钩的经验,而且我对内联汇编(仅限AT&T)知之甚少.互联网上预先制作的绕行程序包适用于Windows或使用其他整个方法(即预加载dll以覆盖原始程序).所以基本上; 我该怎么办才能走上正轨?我应该阅读有关调用约定(在本例中为cdecl)并了解内联汇编或该怎么做?最好的可能是linux绕行的功能性封装类.最后,我想要一些简单的事情:

void * addressToFunction = SigScanner.FindBySig("Signature_ASfs&43"); // I've already done this part
void * original = PatchFunc(addressToFunction, addressToNewFunction); // This replaces the original function with a hook to mine, …
Run Code Online (Sandbox Code Playgroud)

linux assembly hook gcc detours

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

Java线程转储prio值与linux上的实际线程优先级不对应?

我打算在我的Java代码中使用线程优先级.应用程序应在我的Linux系统上运行:

>uname -a
Linux <host> 3.0.0-15-generic #26-Ubuntu SMP <date> x86_64 x86_64 x86_64 GNU/Linux

>java -version
java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.1)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
Run Code Online (Sandbox Code Playgroud)

在Web上阅读完之后,我现在使用以下命令启动我的测试应用程序:

sudo java -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=1 -jar ThreadPriorityTest.jar
Run Code Online (Sandbox Code Playgroud)

测试应用程序包含以下两个类:

package ch.mypackage;

public class CountingRunnable implements Runnable{

private long count=0;
private boolean goOn=true;

public long getCount() {
    return count;
}

public void stop(){
    goOn=false;
}

public void run() {
    for(long iteration=0;goOn&&iteration<Long.MAX_VALUE;++iteration){
        ++count;
    }
}

}




package ch.mypackage;

public class PriorizedCountingThreads …
Run Code Online (Sandbox Code Playgroud)

java linux multithreading pthreads jstack

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

预期的标识符或'('在数字常量之前?

我有这个头文件...出于某种原因我一直收到一个错误,说 log_server.h:48: error: expected identifier or ‘(’ before numeric constant 我在定义put_evt和print_evt_list函数的两行上都出现了这个错误,这里是代码的样子:

#ifndef _GENERIC
#define _GENERIC
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#endif

#ifndef _NETWORKING
#define _NETWORKING
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
typedef struct sockaddr SA;/* To make casting in the (bind, recvfrom, sendto) more readable */
#endif

#define LOGIN_EVT 0
#define LOGOUT_EVT 1

#define RECV_MSG 27
#define SEND_MSG 64000
#define MAX_EVT_COUNT 3000

struct evt{ 
    char user_name[8];
    int type;
    long int time; …
Run Code Online (Sandbox Code Playgroud)

c linux

8
推荐指数
3
解决办法
6万
查看次数

什么是更好的:选择vs线程?

在linux中.

我想建立一个自动转向器,当按下一个键时,它将具有启用/禁用功能.显然应该有2个并行运行的东西(clicker本身,以及启用/禁用功能)

每个实现的缺点和优点:使用将处理自动点击功能的线程和另一个主线程(用于启用/禁用等...)或使用系统调用选择并等待输入/键盘?

c linux algorithm select multithreading

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

使用流式传输的gsoap restful c ++客户端

如何编写一个gsoap restful C++/Solaris客户端,它应该使用流媒体将文档(xsd__base64Binary)发送到webservice?

我们尝试编写一个没有流式传输的gsoap restful客户端,它工作正常.我们使用gsoap生成了一个请求xml(serialization-soap_begin_send( - ),soap_serialize( - ),soap_put( - ),soap_end_send( - )),然后使用了soap_post_connect(---),soap_send(---) ,soap_end_send(---)发送请求.

我们在gsoap客户端使用MTOM进行流式处理并且工作正常.是否可以在gsoap restful客户端中流式传输文档?我们可以在宁静的情况下使用MTOM吗?如果是,请您告诉我们,我应该使用什么gsoap函数进行序列化,然后发送该xml请求?如果您有任何示例代码,请分享.

c++ linux rest web-services gsoap

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

在C++共享对象文件中找到完整的函数定义

我有一个链接器错误,它表示对函数的未定义引用.我期望函数的共享库具有该函数名称(我通过nm -s检查)所以现在接下来要看的是函数参数是否正确.如何在共享对象文件中查看函数的参数类型和数量?

编辑:所以它的问题是:我试图通过链接共享的C对象来创建一个C++共享对象文件,但是在C++源代码中我没有在"extern"C""块中包含头文件,所以它无法找到那些符号,感谢所有回复此问题的人.这个问题现在解决了.

c++ linux compiler-errors shared-libraries linker-errors

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

Linux中的CreateRemoteThread

我在Windows中使用CreateRemoteThread,想知道Linux中是否可以使用相同的东西.是否可以在Linux中执行此操作?

linux ptrace posix pthreads

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

Linux内核如何确定__init调用的顺序?

__init在驱动程序module_init和内核的其他函数中,内核中有许多调用实例.我怀疑的是内核如何确定__init调用的顺序.更重要的是,它如何确定驱动程序module_init调用的顺序?

linux kernel-module linux-kernel

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

gccgo on Precise

当尝试在Precise上与gccgo链接时,我收到此链接错误:

matt@matt-1005P:~/src/gopath/src/meme$ gccgo cmd/meme/main.go -o meme
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

有报告称此错误,但没有干净的解决方案.我如何解决它?

gccgo(Ubuntu/Linaro 4.7.0-0ubuntu4)4.7.0

Linux matt-1005P 3.2.0-24-generic-pae#38-Ubuntu SMP Tue May 1 16:40:26 UTC 2012 i686 i686 i386 GNU/Linux

linux ld go gccgo ubuntu-12.04

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

如何在不安装RPM的情况下"重新打包"RPM文件,例如cpio2rpm?

  1. 我能够从RPM文件中提取文件,但是如何"重建"它,例如cpio2rpm?
  2. 我使用以下命令解压缩了RPM文件.rpm2cpio theFileName.rpm | cpio -idmv
  3. 我必须修改一些Web应用程序文件,如*.php,*.html或.js.这些文件不需要任何源重新编译.因此,我想在不重建rpm的情况下更改或更改这些文件.因为,我需要为Redhat Linux和SUSE等多个平台以及32位和64位操作系统等多种架构执行此操作.
  4. 我希望只在系统上进行这些更改,而不需要重建rpm,并且不会有目标系统架构依赖(如i386,64).
  5. 我看起来不像命令rpmbuild -rebuild the.src.rpm,因为我没有源代码.我需要重建二进制.RPM文件(不是源.rpm)
  6. 我希望在没有源和平台或架构独立的情况下这样做,如果可能的话不使用spec文件.

    任何好友,请你建议任何解决方案或任何免费工具.

    感谢所有花时间阅读和回复我的线程的人.

linux rebuild rpm

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