This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
I'm sorry for making a mistake when sending this email. This one contains attachements. On Sun, Apr 4, 2010 at 9:54 AM, Neo Liu <diabloneo@gmail.com> wrote: > I write a script to monitor the open syscall of a target process. In the probe > handler, I want to replace the $filename argument of the sys_open, so I can > make the sys_open open another file. In order to achieve this purpose, I use > __get_free_page() to allocate a new memory page (the page is in kernel spaces, > the address is higher than 0xC0000000), put a new filename in this > memory page, and let $filename parameter points to this new page. So, the > $filename contains a new filename string. However, the open syscall returns > failure. Is this because the open syscall can't access an address in the kernel > spaces? > > The three attachments are my example codes and stap output. > I use the following command line: > $gcc -o fopen fopen.c > $sudo stap -g open.stp -c ./fopen > > On Thu, Apr 1, 2010 at 9:26 PM, Frank Ch. Eigler <fche@redhat.com> wrote: >> Neo Liu <diabloneo@gmail.com> writes: >> >>> How can I use systemtap to change a string type parameter in a >>> syscall probe? For example, I use "probe syscall.open", I want to >>> change the "filename" parameter to make the "open" syscall open a >>> different file. How can I do that? >> >> We don't currently have helper functions for this: kernel_string() and >> user_string() just read. ÂSomeone could write embedded-c routines to >> do kernel_set_string() etc., but if we put them into the standard >> tapset we need to make such functions only available in guru mode. >> (That would probably need the invention of a /* guru */ marker.) >> >> - FChE >> >
#include <stdio.h> #include <errno.h> #include <string.h> int main(void) { FILE *fp = NULL; if ((fp = fopen("temp.txt", "w")) == NULL) { printf("%d %s\n", errno, strerror(errno)); printf("open file unsucessfully!\n"); return -1; } else { fprintf(fp, "hello, world!\n"); fclose(fp); } return 0; }
Attachment:
open.stp
Description: Binary data
Attachment:
open.stp.out
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |