Dtrace पॉज़िक्स_स्पॉन को केवल 3 तर्क के साथ बुलाती है। हाथ से लॉन्च करने की कोशिश कर रहा है


2

मैं dtrussएक ऐसी प्रक्रिया पर दौड़ा जो एक और लॉन्च करती है: लीग ऑफ़ लीजेंड्स लॉन्चर मुख्य गेम प्रक्रिया को कुछ तर्कों के साथ शुरू करता है जो मैं कमांड लाइन से होकर नहीं गुजर सकता।

क्या मेरा ध्यान आकर्षित किया गया था dtruss आउटपुट की यह पंक्ति:

PID/THRD  RELATIVE  ELAPSD    CPU SYSCALL(args)          = return
9386/0x47dac:     19625    3013   1805 posix_spawn(0x2A634FC, 0x38A2A00, 0xB06A56E0)         = 0 0

मैंने उस मैन पेज को देखा posix_spawn, और यह 6 तर्कों को स्वीकार करने वाला है। वे क्रम में, कर रहे हैं, PID, /path/to/file, file_actions, aatrp, argvऔर envp

मैं एक ही समय में GDB के माध्यम से कदम रख रहा था dtruss, इसलिए मैं प्रश्न में स्मृति का निरीक्षण करने में सक्षम था।

  • पहला तर्क 0x000024d2 की ओर इशारा किया, जो PID में था।
  • दूसरा तर्क एक चार सरणी की ओर इशारा करता है: लीगोफ्लेगेंड्स के लिए निष्पादन योग्य मार्ग
  • तीसरा तर्क हमेशा एक ही बात की ओर इशारा करता है, जिसमें से अचिंतनीय स्ट्रिंग प्रतिनिधित्व है \026l<?

मुझे नहीं पता कि यह क्या बनाना है। अंततः मैं अपने कस्टम तर्क के साथ, सी के माध्यम से स्वयं इस प्रक्रिया को लॉन्च करने में सक्षम होना चाहता हूं, लेकिन मुझे लगता है कि ऐसा करने के लिए पहला कदम यह समझना है कि इसे सिस्टम द्वारा कैसे बुलाया जाता है, और वह तीसरा तर्क क्या है।

मेरे प्रश्न हैं: मैं यह जानने के लिए और क्या कर सकता हूं कि तीसरा तर्क क्या है (?) और क्या मैं ऐसा करने की कोशिश कर रहा हूं (लांचर को दरकिनार करना) भी संभव है?

यह सीधे विंडोज कमांड-लाइन पर, के माध्यम से संभव है,

 @start "" "League of Legends.exe" "8394" "LoLLauncher.exe" "" "spectator fspectate.op.gg:4081 tjJbtRLQ/HMV7HuAxWV0XsXoRB4OmFBr 1391881421 NA1"

लेकिन मैक पर यह सिर्फ लॉन्चर को पुनः लॉन्च करता है।

संदर्भ के लिए, मैं पहले ही एक लंबा (और अनुत्तरित) प्रश्न लिख चुका हूँ जो मैंने किया है।

कृपया मुझे बताएं कि मैं इस प्रश्न को कैसे सुधार सकता हूं। मैंने 50 से अधिक घंटे बिताए हैं, अपने दम पर यह पता लगाने की कोशिश कर रहा हूं, ड्रूटस आउटपुट के माध्यम से मजबूर कर रहा हूं, और मैं बस हार मानने के लिए तैयार हूं।

जवाबों:


0

यदि आप dtruss का सोर्स कोड पढ़ते हैं:

cat `which dtruss`

आपको पता चलेगा कि तर्कों की संख्या कठिन-कूटबद्ध है।

प्रवेश:

 syscall:::entry
 /(OPT_command && pid == $target) || 
  (OPT_pid && pid == PID) ||
  (OPT_name && NAME == strstr(NAME, execname)) ||
  (OPT_name && execname == strstr(execname, NAME)) ||
  (self->child)/
 {
    /* set start details */
    self->start = timestamp;
    self->vstart = vtimestamp;
    self->arg0 = arg0;
    self->arg1 = arg1;
    self->arg2 = arg2;

    /* count occurances */
    OPT_counts == 1 ? @Counts[probefunc] = count() : 1;
 }

वापसी:

 /* print 3 arg output - default */
 syscall:::return
 /self->start/
 {
    /* calculate elapsed time */
    this->elapsed = timestamp - self->start;
    self->start = 0;
    this->cpu = vtimestamp - self->vstart;
    self->vstart = 0;
    self->code = errno == 0 ? "" : "Err#";

    /* print optional fields */
    /* OPT_printid  ? printf("%5d/%d:  ",pid,tid) : 1; */
    OPT_printid  ? printf("%5d/0x%x:  ",pid,tid) : 1;
    OPT_relative ? printf("%8d ",vtimestamp/1000) : 1;
    OPT_elapsed  ? printf("%7d ",this->elapsed/1000) : 1;
    OPT_cpu      ? printf("%6d ",this->cpu/1000) : 1;

    /* print main data */
    printf("%s(0x%X, 0x%X, 0x%X)\t\t = %d %s%d\n",probefunc,self->arg0,
        self->arg1,self->arg2,(int)arg0,self->code,(int)errno);
    OPT_stack ? ustack()    : 1;
    OPT_stack ? trace("\n") : 1;
    self->arg0 = 0;
    self->arg1 = 0;
    self->arg2 = 0;
 }

कुछ syscalls में bespoke हैंडलिंग ( /* mmap has 6 arguments */) है।

मैं स्क्रिप्ट की एक प्रतिलिपि बना और कुछ और में प्रतिलिपि चिपकाया self->arg*और , 0x%X

मैं डिफ़ॉल्ट को 6 args में बदलने में सक्षम था, इस तरह से आउटपुट प्राप्त करना:

posix_spawn(0x700003AA66B4, 0x7FF7B215BF10, 0x700003AA6570, 0x700003AA6610, 0x700003AA6720, 0x0)         = 0 0

क्योंकि हमें केवल काउंटर बढ़ाने के बजाय कॉपी पेस्ट करना पड़ता है: DTrace लूप्स का समर्थन नहीं करता है। मुझे लगता है क्योंकि कर्नेल के अंदर एक अनंत लूप की संभावना का पता लगाने के लिए यह अस्वीकार्य है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.