小编Gui*_*nal的帖子

如何杀死pid不断变化的进程?

我知道我可以使用这个技巧if (fork()) exit(0);来改变当前进程的pid.因此,以下程序的pid变化非常快.如何杀死这样的进程?是否有一些更好的方法比执行大量的方法,killall procname直到一个能够kill()在它之前运行?我知道它不是一个'进程',而是每个运行几微秒的许多进程.

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
    pid_t self = getpid();
    while (1)
    {
        if (fork()) exit(0);
        if (self + 10000 < getpid()) break; // Just to kill it after some time
        usleep(1000);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我发现列出该过程的唯一方法是执行ps -A | grep procname几次,直到一个显示一些输出.为什么不总是列出流程?

c unix linux process

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

禁用WinAPI

我正在构建一个游戏,每个玩家都必须对他的机器人进行编程.关键的想法是播放器将使用C(或C++,或任何兼容的语言)编程,构建DLL并将此DLL发送到服务器,以便没有人可以获取他的代码.问题是:如何确保他没有调用任何非法功能?就像创建文件或打开套接字一样.DLL将加载LoadLibrary并将调用一个函数.所有交互都将在回调函数中发生.一个可能的解决方案是放置一个空的kernel32.dll(和其他),以便所有winapi调用都将失败.这样安全,适用于所有情况吗?有没有更好的方法呢?

请注意,播放器线程(称为dll的那个)必须仍然能够与游戏通信,可能还有一个打开的套接字.在Linux上,这可以轻松完成seccomp.

c dll winapi

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

Qt无法在Windows上检测打印机

我在Windows 7(32位)上使用Qt进行项目(Qt 5.0.2,预编译并从qt-project.org下载),我在尝试打印文档时遇到问题.

qDebug() << QPrinterInfo::availablePrinters().size(); // 0
Run Code Online (Sandbox Code Playgroud)

我能够以PDF格式打印,并且我在其他计算机上测试了相同的可执行文件,它运行良好.我确实安装了打印机,我可以从任何其他程序(如记事本或Word)正常打印.任何线索,为什么它返回一个空列表?我无法在任何地方找到这种行为,这是一个Qt错误吗?

c++ printing qt

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

将对象序列化为加密的 std::fstream (C++)

有没有办法创建加密的文件流?

我想做这样的事情:

string myString;
fstream myStream;

myStream.create("my path", "my password", cipherAlgorithm);
myStream.write(myString); - this code saves my string to an encrypted stream
myStream.close();
Run Code Online (Sandbox Code Playgroud)

谢谢。

c++ std

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

Linux上的Ruby使用/ dev/random吗?

我正在创建一个pastebin应用程序,我希望粘贴的ID是真正随机的./dev/random在Linux上(托管在Linux机器上)使用噪声,因此它的输出是真正随机的.

目前我使用此代码生成ID:

self.guid = Digest::SHA1.hexdigest(Time.new.to_s + (0...50).map{ ('a'..'z').to_a[rand(26)] }.join)
Run Code Online (Sandbox Code Playgroud)

Ruby的rand功能是否使用/dev/random,如果不是,我如何/dev/random在Ruby中使用?谢谢.

ruby linux random

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

如何使应用程序符号对库可见?

我有一个加载库的应用程序dlopen,它看起来像这样:

#include <iostream>
#include <dlfcn.h>

void foo()
{
    std::cout << "foo";
}

int main()
{
    void* libbar = dlopen("./libbar.so", RTLD_LAZY);
    if (!libbar)
    {
        std::cerr << dlerror() << std::endl;
        return 1;
    }
    void(*bar)() = (void(*)())dlsym(libbar, "bar");
    if (!bar)
    {
        std::cerr << dlerror() << std::endl;
        return 1;
    }
    bar();
    dlclose(libbar); 
}
Run Code Online (Sandbox Code Playgroud)

这是libbar:

#include <iostream>

void foo();

extern "C"
void bar()
{
    foo();
    std::cout << "bar" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

./libbar.so: undefined symbol: _Z3foov
Run Code Online (Sandbox Code Playgroud)

预期产量:

foobar
Run Code Online (Sandbox Code Playgroud)

如何让人foo眼前一亮 …

c c++ linux gcc visibility

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

拆卸C函数

我试图理解以下函数的反汇编代码.

void func(char *string) {
    printf("the string is %s\n",string);
}
Run Code Online (Sandbox Code Playgroud)

下面给出了反汇编代码.

1) 0x080483e4 <+0>:     push   %ebp  
2) 0x080483e5 <+1>:     mov    %esp,%ebp  
3) 0x080483e7 <+3>:     sub    $0x18,%esp  
4) 0x080483ea <+6>:     mov    $0x80484f0,%eax  
5) 0x080483ef <+11>:    mov    0x8(%ebp),%edx  
6) 0x080483f2 <+14>:    mov    %edx,0x4(%esp)  
7) 0x080483f6 <+18>:    mov    %eax,(%esp)  
8) 0x080483f9 <+21>:    call   0x8048300 <printf@plt>
Run Code Online (Sandbox Code Playgroud)

谁能告诉我4-7行是什么意思(不是文字解释).为什么在第3行的堆栈上分配24个字节?

c disassembly

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

在C中编写内存管理功能?

在我开始的C语言程序中,我注意到我自由地调用了很多,所以我想做一个调用一次函数来释放所有东西.这段代码是一种有效的方法,还是有其他建议可以改进它?

#include <stdio.h>
#include <stdlib.h>

void *items_to_free[1024];
int intItemsToFree = 0;

void mm_init(void)
{
    int i;

    for (i = 0; i < 1024; i++)
    {
        items_to_free[i] = NULL;
    }
}

void mm_release(void)
{
    int i;

    for (i = 0; i < 1024; i++)
    {
        if (items_to_free[i])
        {
            printf("Freeing %p\n", items_to_free[i]);
            free(items_to_free[i]);
            items_to_free[i] = NULL;
        }    
    }
}

void mm_add(void *p)
{
    items_to_free[intItemsToFree++] = p;
}


int main(void)
{
    int *i = NULL;

    /* initialize memory management */
    mm_init();

    /* allocate …
Run Code Online (Sandbox Code Playgroud)

c memory-management

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

参数数量错误(Ruby)

class Testdeck
    attr_accessor :cards

    def initialize
        @cards = []
        counter = 0
        ['H','C', 'S', 'D'].product['2','3','4','5','6','7','8','9','10','J','K','Q','A'].each do |arr|
            @cards << Card.new(arr[0], arr[1])
        end
    end
end

zen = Testdeck.new
puts zen.cards.pop
Run Code Online (Sandbox Code Playgroud)

我花了最后一小时试图修复此错误.我得到的错误是:

wrong number of arugments (Argument Error)
Run Code Online (Sandbox Code Playgroud)

ruby

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

标签 统计

c ×5

c++ ×3

linux ×3

ruby ×2

disassembly ×1

dll ×1

gcc ×1

memory-management ×1

printing ×1

process ×1

qt ×1

random ×1

std ×1

unix ×1

visibility ×1

winapi ×1