Articles of 调用

python subprocess.call参数的问题

我正在写一个简单的Python脚本,在Linux下使用subprocess对我的子网上的主机执行一批并发的单个ping。 手动执行该命令: ping -c 1 192.168.68.1 剧本:: #!/usr/bin/python from subprocess import call path = "ping" flags = "-c 1 " for i in range(1,3): ip_addr = "192.168.68." + str(i) args = flags + ip_addr print "doing: {} {}".format(path, args) call([path, args]) 评论呼叫输出预期: doing: ping -c 1 192.168.68.1 doing: ping -c 1 192.168.68.2 通过call() ,脚本似乎调用ping但未知参数。 输出如下: […]

为什么64位寻址的sys_write调用可以正常工作,寄存器中的参数用于32位寻址

这是一段代码,引起了我的问题: mystr: .string "ABCDEFGH" .set mystrlen, . – mystr .text .globl main .type main, @function main: sub $0x10, %rsp movq $0x44434241, 0x8(%rsp) lea 0x8(%rsp), %rcx movq $4, %rax movq $1, %rbx //movq $mystr, %rcx //movq $mystrlen, %rdx movq $4, %rdx int $0x80 movq $1, %rax movq $0, %rbx int $0x80 表示片段不起作用,在64位寻址寄存器为系统调用参数cuz应分别为rdi, rsi, rdx第一,第二和第三系统调用参数,而不是rbx, rcx, rdx […]

* _r UNIX调用可重入(asynchronous信号安全),线程安全还是两者兼而有之?

重入和线程安全函数是有区别的,我不知道以_r结尾的Linux函数是线程安全的,可重入的(我的意思是asynchronous信号安全的)或者两者兼而有之,

为什么“echo l> / proc / sysrq-trigger”调用跟踪输出总是类似的?

根据官方的kernel.org文档, echo l > /proc/sysrq-trigger应该给我所有CPU的当前调用跟踪。 但是,当我这样做了几次,并在dmesg后,通话跟踪看起来完全相似。 这是为什么?

从Java调用Windows颜色系统

我需要从Java调用Windows颜色系统函数。 在本教程之后,我尝试使用Java Native Access调用DLL函数。 本教程中的所有示例均正常工作。 当我尝试加载和使用Mscms.dll(WCS库之一)DLL似乎已成功加载,但我无法调用任何函数。 function列表在这里 。 我收到一条消息: Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'GetColorDirectory' 我的代码有什么问题? 请问你能帮帮我吗? import com.sun.jna.Library; import com.sun.jna.Native; public class WCS_test { public interface Mscms extends Library { // http://msdn.microsoft.com/en-us/library/dd316928%28v=vs.85%29.aspx boolean GetColorDirectory(String pMachineName, String[] pBuffer, int pdwSize); } private static Mscms mscms = (Mscms) Native.loadLibrary("C:/Windows/system32/Mscms.dll", Mscms.class); public static […]

在没有堆栈的情况下在Linux上进行系统调用

在Linux i386上, int $0x80系统调用ABI可以很容易地执行系统调用而不需要有效的用户空间栈。 另一方面,vdso / vsyscall接口需要访问堆栈。 其他Linux端口如何在这方面,特别是x86_64? 他们有办法让系统调用没有堆栈? 是否有可用的系统调用每个拱门的方法?

系统调用返回值和errno

我在我的程序中使用以下系统调用: recvfrom sendto sendmsg 从上面提到的每个系统调用中,我检查它是否完成,没有任何中断,如果中断,我重试。 例如: recvagain: len = recvfrom(fd, response, MSGSIZE, MSG_WAITALL, (struct sockaddr *)&from, &fromlen); if (errno == EINTR) { syslog(LOG_NOTICE, "recvfrom interrupted: %s", strerror(errno)); goto recvagain; } 这里的问题是,我需要重置errno值为0,每次失败。 或者,如果recvfrom()成功,是否将errno重置为0? recvfrom()手册页说: 成功完成后,recvfrom()以字节为单位返回消息的长度。 如果没有消息可用于接收并且对等体已经执行有序closures,则recvfrom()返回0.否则,该函数返回-1并设置errno以指示错误。 与sendto和sendmsg相同的情况。 我现在无法真正检查,因为我没有访问服务器客户端设置。 任何想法? 谢谢

LD_PRELOAD不适用于printf

我正在使用LD_PRELOAD在Linux中捕获write()系统调用。 我成功地能够做这个写系统调用,并使其工作。 但是,当我打电话printf()那个时候它不起作用。 如果我们使用strace观察printf堆栈跟踪,我发现printf调用write()系统调用写入控制台,但是在那个时候write()系统调用在调用write()系统调用。 任何人都知道为什么会发生这种情况?

Callstack地址

有人知道我是否可以从特定地址的电话中读取数据? 假设我有一个从调用堆栈的基地址的偏移地址,我怎么能得到基地址? 谢谢 :)

从程序集调用Windows API,但没有硬编码地址

我在学习Windows XP环境下的fasm时,我读到一个fasm源代码,发现调用macros invoke MessageBox,0,[_strbuf],_msgcap,MB_ICONINFORMATION+MB_OK 并导入macros。 import user,\ MessageBox,'MessageBoxA',\ wsprintf,'wsprintfA' 但我找不到任何MessageBoxA的硬编码地址,也不能在汇编代码中加载user32.dll。 只有标记string的macros定义,而不是地址。 我的假设是这样的 有代码加载user32.dll并返回加载的dll =>这里的起始地址,让我们调用返回的地址到位置A. 有硬编码的地址和标签对(例如MessageBoxA = 0x00000000) 所以指令“呼叫”可以调用MessageBoxA标签(将被转换为位置A + MessageBoxA偏移量) 我的假设是错误的? 我不知道如何调用API。 谢谢