小编sam*_*rai的帖子

获取子进程中分叉进程的stdout/stderr

我有一个C程序调用 fork()

我有一个python脚本,用于执行C程序

child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE,stdout=subprocess.PIPE, bufsize=0)
Run Code Online (Sandbox Code Playgroud)

现在,我可以读取标准输出标准错误child.stderr.read(1)child.communicate()...但我的问题是,现在,我怎样才能得到只有从输出分叉过程.这甚至可能吗?我可以从原来的C程序和分支中获取pid 吗?

亲切的问候,非常感谢你:)

法比安

python fork subprocess stdout stderr

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

SCSI读取(10)和写入(10)与SCSI通用接口

我尝试发出scsi read(10)并将(10)写入 SSD.我使用此示例代码作为参考/基本代码.

这是我的scsi阅读:

#define READ_REPLY_LEN 32
#define READ_CMDLEN 10
void scsi_read()
{
  unsigned char Readbuffer[ SCSI_OFF + READ_REPLY_LEN ];
  unsigned char cmdblk [ READ_CMDLEN ] =
      {        0x28,  /* command */
                  0,  /* lun/reserved */
                  0,  /* lba */
                  0,  /* lba */
                  0,  /* lba */
                  0,  /* lba */
                  0,  /* reserved */
                  0,  /* transfer length */
     READ_REPLY_LEN,  /* transfer length */
                  0 };/* reserved/flag/link */
  memset(Readbuffer,0,sizeof(Readbuffer));
  memcpy( cmd + SCSI_OFF, cmdblk, …
Run Code Online (Sandbox Code Playgroud)

linux scsi linux-device-driver

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

在PyCrypto AES MODE_CTR中包含随机数和块计数

一些背景信息,您可以跳过此部分的实际问题

这是我在stackoverflow上关于这个主题的第三个问题.是完整的,这些都是其他问题AES隐窝,JS和PyCrypto匹配AES德/加密在Python和JavaScript.不幸的是,我的最后一次尝试得到了原始问题的两个downvots.问题是,即使我不知道我真正的问题是什么.我只是四处寻找我正在寻找的真正问题.通过评论中的反馈,并阅读一些其他信息,我更新了我的问题.我认为,我正在挖掘正确的问题.但是我的问题在我的更新后没有得到任何更多的观点.所以我真的希望,这个问题现在更清晰易懂 - 即使我知道我现在的问题是什么:D
谢谢大家为这个很酷的社区制作堆栈流 - 我经常在这里找到解决问题的方法.请继续对不良问题提供反馈,以便对其进行改进和更新,从而增加这个庞大的知识和解决方案数据库.并随意纠正我的英语语法和拼写.

问题

AES中的JavaScript

我有一个加密的字符串,我可以使用这个AES 256 CTR模式的Javascript实现解密

password = "myPassphrase"
ciphertext = "bQJdJ1F2Y0+uILADqEv+/SCDV1jAb7jwUBWk"
origtext = Aes.Ctr.decrypt(ciphertext, password, 256);
alert(origtext)
Run Code Online (Sandbox Code Playgroud)

这会This is a test Text弹出解密我的字符串和警告框.

AES与PyCrypto

现在我想用python和PyCrypto解密这个字符串

password = 'myPassphrase'
ciphertext = "bQJdJ1F2Y0+uILADqEv+/SCDV1jAb7jwUBWk"
ctr = Counter.new(nbits=128)
encryptor = AES.new(key, AES.MODE_CTR, counter=ctr)
origtext = encryptor.decrypt(base64.b64decode(ciphertext))
print origtext
Run Code Online (Sandbox Code Playgroud)

此代码无法运行.我得到了ValueError: AES key must be either 16, 24, or 32 bytes long.当我认识到,我必须在PyCrypto中做更多事情然后只是调用一个解密方法,我开始调查结束尝试弄清楚我必须做什么.

调查

我首先想到的基本事情是:

  • AES 256位(?).但AES标准是128位.将密码增加到32字节是否足够? …

javascript python encryption aes pycrypto

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

Linux堆结构和malloc()和free()的行为

我有一个Debian的Linux 2.6内核,我试着去了解如何与堆工程/行为malloc()free().我试图搜索malloc()free()算法和堆结构,但我找不到任何有用的东西.不幸的是,我知道得少谈Linux和记忆是如何工作的,了解的源代码free()malloc().

这是一个示例代码:

int main(int argc, char **argv)
{
    char *a, *b, *c;

    a = malloc(32);
    b = malloc(32);
    c = malloc(32);

    strcpy(a, argv[1]);
    strcpy(b, argv[2]);
    strcpy(c, argv[3]);

    free(c);
    free(b);
    free(a);
}
Run Code Online (Sandbox Code Playgroud)

gdb,run AAAA BBBB CCCC我可以检查堆.这是在strcpys之前但之前的状态frees:

(gdb) x/32x 0x804c000
0x804c000:  0x00000000  0x00000029  0x41414141  0x00000000
0x804c010:  0x00000000  0x00000000  0x00000000  0x00000000
0x804c020:  0x00000000  0x00000000  0x00000000  0x00000029
0x804c030:  0x42424242  0x00000000  0x00000000  0x00000000
0x804c040: …
Run Code Online (Sandbox Code Playgroud)

c linux heap gdb memory-management

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

从具有 O_DIRECT 的 HDD 读取()失败并显示 22(EINVAL,无效参数)

我想read()用 SATA HDD制作一个基本的/dev/sdd。Awrite()似乎有效。也read()可以write()在没有 Flag 的情况下工作O_DIRECT。我读过,它必须与块大小对齐。所以我用它来获取块大小:

root$ blockdev --getsize /dev/sdd
488397168

root$ blockdev --getsize64 /dev/sdd
250059350016

root$ python -c "print 250059350016.0/488397168"
512.0
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我有根。HDD 通过 PCIe SATA 卡连接,并向lspci -vv我显示它使用基本的 ahci ( drivers/ata/ahci.c) 驱动程序。我在 64 位 Power Architecture 上使用 3.2.0 Linux 内核。

这是我的代码:

root$ blockdev --getsize /dev/sdd
488397168

root$ blockdev --getsize64 /dev/sdd
250059350016

root$ python -c "print 250059350016.0/488397168"
512.0
Run Code Online (Sandbox Code Playgroud)

输出是:

tmp_buffer is at: 1cc80010 % 512 = 16 …
Run Code Online (Sandbox Code Playgroud)

linux io hard-drive block-device

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