{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,11,18]],"date-time":"2025-11-18T11:47:35Z","timestamp":1763466455747},"reference-count":24,"publisher":"Wiley","issue":"2","license":[{"start":{"date-parts":[[2006,10,30]],"date-time":"2006-10-30T00:00:00Z","timestamp":1162166400000},"content-version":"vor","delay-in-days":4654,"URL":"http:\/\/onlinelibrary.wiley.com\/termsAndConditions#vor"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Softw Pract Exp"],"published-print":{"date-parts":[[1994,2]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>Inserting instrumentation code in a program is an effective technique for detecting, recording, and measuring many aspects of a program's performance. Instrumentation code can be added at any stage of the compilation process by specially\u2010modified system tools such as a compiler or linker or by new tools from a measurement system. For several reasons, adding instrumentation code after the compilation process\u2014by rewriting the executable file\u2014presents fewer complications and leads to more complete measurements.<\/jats:p><jats:p>This paper describes the difficulties in adding code to executable files that arose in developing the profiling and tracing tools qp and qpt. The techniques used by these tools to instrument programs on MIPS and SPARC processors are applicable in other instrumentation systems running on many processors and operating systems. In addition, many difficulties could have been avoided with minor changes to compilers and executable file formats. These changes would simplify this approach to measuring program performance and make it more generally useful.<\/jats:p>","DOI":"10.1002\/spe.4380240204","type":"journal-article","created":{"date-parts":[[2006,11,17]],"date-time":"2006-11-17T16:55:23Z","timestamp":1163782523000},"page":"197-218","source":"Crossref","is-referenced-by-count":83,"title":["Rewriting executable files to measure program behavior"],"prefix":"10.1002","volume":"24","author":[{"given":"James R.","family":"Larus","sequence":"first","affiliation":[]},{"given":"Thomas","family":"Ball","sequence":"additional","affiliation":[]}],"member":"311","published-online":{"date-parts":[[2006,10,30]]},"reference":[{"key":"e_1_2_1_2_2","unstructured":"ReedHastingsandBobJoyce \u2018Purify: easy detection of memory leaks and access errors\u2019 Proc. Winter Usenix Conference January1992 pp.1\u201312."},{"key":"e_1_2_1_3_2","unstructured":"S. C.Johnson \u2018Postloading for fun and profit\u2019 Proc. Winter 1990 USENIX Conference January1990 pp.325\u2013330."},{"key":"e_1_2_1_4_2","doi-asserted-by":"crossref","unstructured":"ThomasBallandJames R.Larus \u2018Optimally profiling and tracing programs\u2019 Conference Record of the Nineteenth Annual ACM Symposium on Principles of Programming Languages January1992 pp.59\u201370.","DOI":"10.1145\/143165.143180"},{"key":"e_1_2_1_5_2","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380201205"},{"key":"e_1_2_1_6_2","doi-asserted-by":"publisher","DOI":"10.1109\/2.211900"},{"key":"e_1_2_1_7_2","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380010203"},{"key":"e_1_2_1_8_2","doi-asserted-by":"publisher","DOI":"10.1109\/12.2259"},{"key":"e_1_2_1_9_2","doi-asserted-by":"crossref","unstructured":"AmirKishon PaulHudakandCharlesConsel \u2018Monitoring semantics: a formal framework for specifying implementing and reasoning about execution monitors\u2019.Proc. SIGPLAN'91 Conference on Programming Language Design and Implementation June1991 pp.338\u2013352.","DOI":"10.1145\/113446.113474"},{"key":"e_1_2_1_10_2","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380130803"},{"key":"e_1_2_1_11_2","doi-asserted-by":"publisher","DOI":"10.1109\/71.80132"},{"key":"e_1_2_1_12_2","doi-asserted-by":"crossref","unstructured":"David W.Wall \u2018Global register allocation at link time\u2019 Proc. ACM SIGPLAN '86 Symposium on Compiler Construction June1986 pp.264\u2013275.","DOI":"10.1145\/13310.13338"},{"key":"e_1_2_1_13_2","doi-asserted-by":"crossref","unstructured":"David W.WallandMichael L.Powell \u2018The Mahler experience: using an intermediate language as the machine description\u2019 Proc. Second International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS II) October1987 pp.100\u2013109.","DOI":"10.1145\/36206.36190"},{"key":"e_1_2_1_14_2","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380171006"},{"key":"e_1_2_1_15_2","doi-asserted-by":"crossref","unstructured":"Peter B.Kessler \u2018Fast breakpoints: design and implementation\u2019 Proc. SIGPLAN '90 Conference on Programming Language Design and Implementation June1990 pp.78\u201384.","DOI":"10.1145\/93548.93555"},{"key":"e_1_2_1_16_2","unstructured":"MIPS Computer Systems Inc.RISCompiler Languages Programmer's Guide December1988."},{"key":"e_1_2_1_17_2","unstructured":"David W.Wall \u2018Systems for late code modification\u2019 Technical Report WRL Technical Note TN\u201019 Digital Equipment Corporation Western Research Laboratory 1990."},{"key":"e_1_2_1_18_2","doi-asserted-by":"publisher","DOI":"10.1109\/2.214441"},{"key":"e_1_2_1_19_2","doi-asserted-by":"publisher","DOI":"10.1145\/151220.151227"},{"key":"e_1_2_1_20_2","volume-title":"MIPS RISC Architecture","author":"Kane Gerry","year":"1992"},{"key":"e_1_2_1_21_2","doi-asserted-by":"crossref","DOI":"10.1007\/978-1-4612-3192-9","volume-title":"The SPARC Technical Papers","author":"Catanzaro Ben J.","year":"1991"},{"key":"e_1_2_1_22_2","volume-title":"Computer Architecture: A Quantitative Approach","author":"Hennessy John L.","year":"1990"},{"key":"e_1_2_1_23_2","doi-asserted-by":"crossref","unstructured":"OlinShivers \u2018Control flow analysis in Scheme\u2019 Proc. of the SIGPLAN '88 Conference on Programming Language Design and Implementation June1988 pp.164\u2013174.","DOI":"10.1145\/53990.54007"},{"key":"e_1_2_1_24_2","unstructured":"Robert A.Gingell MengLee Xuong T.DangandMark K.Weeks \u2018Shared libraries in sunos\u2019 n.d."},{"key":"e_1_2_1_25_2","unstructured":"SteveChamberlain \u2018libbfd: the binary file descriptor library\u2019 unpublished documentation for the CNU binary utilities April1992."}],"container-title":["Software: Practice and Experience"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/api.wiley.com\/onlinelibrary\/tdm\/v1\/articles\/10.1002%2Fspe.4380240204","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/pdf\/10.1002\/spe.4380240204","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,10,24]],"date-time":"2023-10-24T18:26:36Z","timestamp":1698171996000},"score":1,"resource":{"primary":{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/10.1002\/spe.4380240204"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1994,2]]},"references-count":24,"journal-issue":{"issue":"2","published-print":{"date-parts":[[1994,2]]}},"alternative-id":["10.1002\/spe.4380240204"],"URL":"https:\/\/doi.org\/10.1002\/spe.4380240204","archive":["Portico"],"relation":{},"ISSN":["0038-0644","1097-024X"],"issn-type":[{"value":"0038-0644","type":"print"},{"value":"1097-024X","type":"electronic"}],"subject":[],"published":{"date-parts":[[1994,2]]}}}