From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5129 invoked by alias); 3 Apr 2011 16:54:46 -0000 Received: (qmail 5119 invoked by uid 22791); 3 Apr 2011 16:54:44 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_FC,TW_FD,TW_RG X-Spam-Check-By: sourceware.org Received: from mail-pv0-f169.google.com (HELO mail-pv0-f169.google.com) (74.125.83.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 03 Apr 2011 16:54:36 +0000 Received: by pvg4 with SMTP id 4so1529461pvg.0 for ; Sun, 03 Apr 2011 09:54:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.221.1 with SMTP id t1mr5482857wfg.437.1301849676136; Sun, 03 Apr 2011 09:54:36 -0700 (PDT) Received: by 10.143.42.8 with HTTP; Sun, 3 Apr 2011 09:54:36 -0700 (PDT) In-Reply-To: <20110331121617.GA32739@host1.jankratochvil.net> References: <20110331084729.GA29683@host1.jankratochvil.net> <20110331121617.GA32739@host1.jankratochvil.net> Date: Sun, 03 Apr 2011 16:54:00 -0000 Message-ID: Subject: Re: GDB and LD_PRELOAD library-call interception From: Xavier de Gaye To: Jan Kratochvil Cc: Kevin Pouget , gdb@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd146967f41e904a0067f4e X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2011-04/txt/msg00008.txt.bz2 --000e0cd146967f41e904a0067f4e Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1465 On Thu, Mar 31, 2011 at 2:16 PM, Jan Kratochvil wrote: > > It is not such straightforward, GDB expects the PID it has spawned will be > debugged while with xterm the process being debugged is its child. > > I guess you can write a small C helper which will: > * create new pty > * change its fds 0/1/2 to the slave of this pty > * fork xterm -e own-helper-part pty-unique-id > In own-helper-part interconnect the pty master part and its fds 0/1/2. > The attached files 'xterm_wrapper.py' and 'interconnect_pty.py' are a raw implementation written in python of the above scheme. In gdb do: set exec-wrapper python xterm_wrapper.py The problem with the implementation is that the debuggee cannot set the slave pty as its controlling terminal without forking (set SET_CONTROLLING_TERMINAL to True in 'xterm_wrapper.py' in order to do that, but then exec-wrapper cannot be used). So that it is not possible to interrupt the debuggee with a 'C-c' character. On the other hand the 'interconnect_pty.py' helper used by 'xterm_wrapper.py' can also be used by itself in stand-alone. When run without arguments, it creates a pty and prints the slave pty name so that it can be used in gdb with: set inferior-tty /dev/pts/nn It can also be made to spawn gdb in a new xterm and set correctly the '-tty' gdb option with tne new pty name (kind of the reverse of the initial scheme): python interconnect_pty.py --exec gdb --args '/path/to/debuggee' Xavier --000e0cd146967f41e904a0067f4e Content-Type: text/x-python; charset=US-ASCII; name="interconnect_pty.py" Content-Disposition: attachment; filename="interconnect_pty.py" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gm27m08m0 Content-length: 4978 IyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKaW1wb3J0IG9zCmltcG9ydCBzeXMK aW1wb3J0IHNpZ25hbAppbXBvcnQgZXJybm8KaW1wb3J0IGNvcHkKaW1wb3J0 IHB0eQppbXBvcnQgb3B0cGFyc2UKaW1wb3J0IHRlcm1pb3MKaW1wb3J0IGFz eW5jb3JlCgpjbGFzcyBGaWxlRGlzcGF0Y2hlcihhc3luY29yZS5maWxlX2Rp c3BhdGNoZXIpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGluX2ZkLCBvdXRf ZmQsIHF1aXRfY2hhcj1Ob25lKToKICAgICAgICBhc3luY29yZS5maWxlX2Rp c3BhdGNoZXIuX19pbml0X18oc2VsZiwgaW5fZmQpCiAgICAgICAgc2VsZi5v dXRfZmQgPSBvdXRfZmQKICAgICAgICBzZWxmLnF1aXRfY2hhciA9IHF1aXRf Y2hhcgoKICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICByZXR1cm4g RmFsc2UKCiAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CiAgICAgICAgIyBj YWxsZWQgZnJvbSB0aGUgc2VsZWN0IGxvb3Agd2hlbmV2ZXIgZGF0YSBpcyBh dmFpbGFibGUKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRhdGEgPSBzZWxm LnJlY3YoMTAyNCkKICAgICAgICAgICAgIyB0ZXJtaW5hdGUgdGhlIHNlbGVj dCBsb29wCiAgICAgICAgICAgIGlmIGRhdGEgPT0gc2VsZi5xdWl0X2NoYXI6 CiAgICAgICAgICAgICAgICByYWlzZSBhc3luY29yZS5FeGl0Tm93KAogICAg ICAgICAgICAgICAgICAgICAgICAnXG4lcyB0ZXJtaW5hdGVkLicgJSBvcy5w YXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSkKICAgICAgICAgICAgb3Mud3Jp dGUoc2VsZi5vdXRfZmQsIGRhdGEpCiAgICAgICAgZXhjZXB0IE9TRXJyb3Is IGVycjoKICAgICAgICAgICAgaWYgZXJyWzBdICE9IGVycm5vLkVBR0FJTjoK ICAgICAgICAgICAgICAgIHJhaXNlIGFzeW5jb3JlLkV4aXROb3coZXJyKQoK ZGVmIHBhcnNlX29wdGlvbnMoYXJndik6CiAgICBmb3JtYXR0ZXIgPSBvcHRw YXJzZS5JbmRlbnRlZEhlbHBGb3JtYXR0ZXIobWF4X2hlbHBfcG9zaXRpb249 MzApCiAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCiAgICAg ICAgICAgICAgICAgICAgdXNhZ2U9J3VzYWdlOiBweXRob24gJXByb2cgW29w dGlvbnNdJywKICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI9Zm9ybWF0 dGVyKQogICAgcGFyc2VyLmFkZF9vcHRpb24oJy1lJywgJy0tZXhlYycsCiAg ICAgICAgICAgIHR5cGU9J3N0cmluZycsIGRlc3Q9J3BnbScsCiAgICAgICAg ICAgIGhlbHA9J3Byb2dyYW0gdG8gc3Bhd24gaW4gYSBuZXcgeHRlcm0gdGVy bWluYWwgJwogICAgICAgICAgICAndGhhdCB3aWxsIHVzZSB0aGUgc2xhdmUg cHNldWRvIHRlcm1pbmFsJykKICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcs ICctLXR0eScsCiAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGRlZmF1bHQ9 Jy10dHknLCBtZXRhdmFyPSdUVFlfT1BUJywKICAgICAgICAgICAgaGVscD0n cGFzcyB0byBQR00gdGhlIHNsYXZlIHBzZXVkbyB0ZXJtaW5hbCBuYW1lIHVz aW5nJwogICAgICAgICAgICAnIHRoZSBUVFlfT1BUIG9wdGlvbiAoZGVmYXVs dCBcJyVkZWZhdWx0XCcpJykKICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYScs ICctLWFyZ3MnLAogICAgICAgICAgICB0eXBlPSdzdHJpbmcnLAogICAgICAg ICAgICBoZWxwPSdQR00gYXJndW1lbnRzIChtdXN0IGJlIHF1b3RlZCknKQog ICAgcGFyc2VyLmFkZF9vcHRpb24oJy1tJywgJy0tbWFzdGVyX2ZkJywKICAg ICAgICAgICAgdHlwZT0naW50JywgbWV0YXZhcj0nRkQnLAogICAgICAgICAg ICBoZWxwPSdtYXN0ZXIgcHNldWRvIHRlcm1pbmFsIGZpbGUgZGVzY3JpcHRv ciB0byB1c2UnKQogICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNl X2FyZ3MoYXJncz1hcmd2KQogICAgcmV0dXJuIG9wdGlvbnMKCmRlZiBzcGF3 bl94dGVybShvcHRpb25zLCBwdHluYW1lLCBzbGF2ZV9mZCwgbWFzdGVyX2Zk KToKICAgIGFyZ3YgPSBbJ3h0ZXJtJywgJy1lJywgb3B0aW9ucy5wZ20sIG9w dGlvbnMudHR5LCBwdHluYW1lXQogICAgaWYgb3B0aW9ucy5hcmdzIGlzIG5v dCBOb25lOgogICAgICAgICMgRklYTUUgcXVvdGVzIGluIGFyZ3MgYXJlIG5v dCBoYW5kbGVkCiAgICAgICAgYXJndi5leHRlbmQob3B0aW9ucy5hcmdzLnNw bGl0KCkpCiAgICBwaWQgPSBvcy5mb3JrKCkKICAgIGlmIHBpZCA9PSAwOgog ICAgICAgIG9zLmNsb3NlKHNsYXZlX2ZkKQogICAgICAgIG9zLmNsb3NlKG1h c3Rlcl9mZCkKICAgICAgICBvcy5zZXRzaWQoKQogICAgICAgIG9zLmV4ZWN2 cChhcmd2WzBdLCBhcmd2KQoKbWFzdGVyX2ZkID0gTm9uZQoKZGVmIHNpZ2lu dF9oYW5kbGVyKHNpZ251bSwgZnJhbWUpOgogICAgIyB3cml0ZSBhIEMtYyBj aGFyYWN0ZXIKICAgIGlmIG1hc3Rlcl9mZCBpcyBub3QgTm9uZToKICAgICAg ICBvcy53cml0ZShtYXN0ZXJfZmQsIGNocigzKSkKCmRlZiBtYWluKCk6CiAg ICBnbG9iYWwgbWFzdGVyX2ZkCiAgICBvcHRpb25zID0gcGFyc2Vfb3B0aW9u cyhzeXMuYXJndlsxOl0pCiAgICBtYXN0ZXJfZmQgPSBvcHRpb25zLm1hc3Rl cl9mZAogICAgaWYgbm90IGlzaW5zdGFuY2UobWFzdGVyX2ZkLCBpbnQpOgog ICAgICAgIG1hc3Rlcl9mZCwgc2xhdmVfZmQgPSBwdHkub3BlbnB0eSgpCiAg ICAgICAgcHR5bmFtZSA9IG9zLnR0eW5hbWUoc2xhdmVfZmQpCiAgICAgICAg cHJpbnQgIlNsYXZlIHBzZXVkbyB0ZXJtaW5hbCB0byB1c2U6ICclcyciICUg cHR5bmFtZQogICAgICAgIGlmIG9wdGlvbnMucGdtIGlzIG5vdCBOb25lOgog ICAgICAgICAgICBzcGF3bl94dGVybShvcHRpb25zLCBwdHluYW1lLCBzbGF2 ZV9mZCwgbWFzdGVyX2ZkKQogICAgcHJpbnQgJ1R5cGUgQy1hIHRvIGV4aXQu XG4nCgogICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWdpbnRf aGFuZGxlcikKCiAgICAjIG5vIGVjaG8sIG5vIGNhbm9uaWNhbCBwcm9jZXNz aW5nCiAgICBhdHRyID0gdGVybWlvcy50Y2dldGF0dHIoMCkKICAgIGluaXRf YXR0ciA9IGNvcHkuZGVlcGNvcHkoYXR0cikKICAgIGF0dHJbM10gPSBhdHRy WzNdICYgfnRlcm1pb3MuRUNITwogICAgYXR0clszXSA9IGF0dHJbM10gJiB+ dGVybWlvcy5JQ0FOT04KICAgIHRlcm1pb3MudGNzZXRhdHRyKDAsIHRlcm1p b3MuVENTQURSQUlOLCBhdHRyKQoKICAgICMgaW50ZXJjb25uZWN0IHN0ZGlu IHRvIG1hc3Rlcl9mZCwgYW5kIG1hc3Rlcl9mZCB0byBzdGRvdXQKICAgICMg d2l0aCBhbiBhc3luY29yZSBzZWxlY3QgbG9vcAogICAgIyBDLWEgaXMgdGhl IFF1aXQgY2hhcmFjdGVyCiAgICBtYXN0ZXJfc2xhdmUgPSBGaWxlRGlzcGF0 Y2hlcigwLCBtYXN0ZXJfZmQsIGNocigxKSkKICAgIHNsYXZlX21hc3RlciA9 IEZpbGVEaXNwYXRjaGVyKG1hc3Rlcl9mZCwgMSkKCiAgICBlcnIgPSAnJwog ICAgdHJ5OgogICAgICAgIHdoaWxlIGFzeW5jb3JlLnNvY2tldF9tYXA6CiAg ICAgICAgICAgIGFzeW5jb3JlLnBvbGwoKQogICAgZXhjZXB0IGFzeW5jb3Jl LkV4aXROb3csIGVycjoKICAgICAgICBwYXNzCgogICAgb3MuY2xvc2Uoc2xh dmVfZmQpCiAgICBvcy5jbG9zZShtYXN0ZXJfZmQpCiAgICB0ZXJtaW9zLnRj c2V0YXR0cigwLCB0ZXJtaW9zLlRDU0FEUkFJTiwgaW5pdF9hdHRyKQogICAg aWYgZXJyOgogICAgICAgIHByaW50IGVycgoKaWYgX19uYW1lX18gPT0gJ19f bWFpbl9fJzoKICAgICAgICBtYWluKCkKCg== --000e0cd146967f41e904a0067f4e Content-Type: text/x-python; charset=US-ASCII; name="xterm_wrapper.py" Content-Disposition: attachment; filename="xterm_wrapper.py" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gm27neww1 Content-length: 1456 IyEgL3Vzci9iaW4vZW52IHB5dGhvbgoKaW1wb3J0IHN5cwppbXBvcnQgb3MK aW1wb3J0IHB0eQppbXBvcnQgdGVybWlvcwppbXBvcnQgZmNudGwKCmRlZiBm b3JrX3h0ZXJtKG1hc3Rlcl9mZCwgc2xhdmVfZmQpOgogICAgcGlkID0gb3Mu Zm9yaygpCiAgICBpZiBwaWQgPT0gMDoKICAgICAgICBvcy5jbG9zZShzbGF2 ZV9mZCkKICAgICAgICBoZWxwZXIgPSBvcy5wYXRoLmpvaW4oCiAgICAgICAg ICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSwgJ2lu dGVyY29ubmVjdF9wdHkucHknKQogICAgICAgIGFyZ3YgPSBbJ3h0ZXJtJywg Jy1lJywgJ3B5dGhvbicsIGhlbHBlciwgJy0tbWFzdGVyX2ZkJywgc3RyKG1h c3Rlcl9mZCldCiAgICAgICAgb3MuZXhlY3ZwKGFyZ3ZbMF0sIGFyZ3YpCgog ICAgb3MuY2xvc2UobWFzdGVyX2ZkKQogICAgcmV0dXJuIHBpZAoKZGVmIGV4 ZWNfcGdtKHNsYXZlX2ZkLCBhcmd2KToKICAgIG9zLmR1cDIoc2xhdmVfZmQs IDApCiAgICBvcy5kdXAyKHNsYXZlX2ZkLCAxKQogICAgb3MuZHVwMihzbGF2 ZV9mZCwgMikKICAgIG9zLmNsb3NlKHNsYXZlX2ZkKQogICAgb3MuZXhlY3Zw KGFyZ3ZbMF0sIGFyZ3YpCgpTRVRfQ09OVFJPTExJTkdfVEVSTUlOQUwgPSBG YWxzZQoKZGVmIG1haW4oKToKICAgIG1hc3Rlcl9mZCwgc2xhdmVfZmQgPSBw dHkub3BlbnB0eSgpCiAgICBwaWQgPSBmb3JrX3h0ZXJtKG1hc3Rlcl9mZCwg c2xhdmVfZmQpCiAgICBhcmd2ID0gc3lzLmFyZ3ZbMTpdCiAgICBpZiBTRVRf Q09OVFJPTExJTkdfVEVSTUlOQUw6CiAgICAgICAgYXJndlswXSA9IG9zLnBh dGguYWJzcGF0aChhcmd2WzBdKQogICAgICAgIHBpZCA9IG9zLmZvcmsoKQog ICAgICAgIGlmIHBpZCA9PSAwOgogICAgICAgICAgICBvcy5zZXRzaWQoKQog ICAgICAgICAgICBmY250bC5pb2N0bChzbGF2ZV9mZCwgdGVybWlvcy5USU9D U0NUVFkpCiAgICAgICAgICAgIGV4ZWNfcGdtKHNsYXZlX2ZkLCBhcmd2KQog ICAgZWxzZToKICAgICAgICBleGVjX3BnbShzbGF2ZV9mZCwgYXJndikKCmlm IF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKCg== --000e0cd146967f41e904a0067f4e--