Low-cost, concurrent checking of pointer and array accesses in C programs

作者: HARISH PATIL , CHARLES FISCHER

DOI: 10.1002/(SICI)1097-024X(199701)27:1<87::AID-SPE78>3.0.CO;2-P

关键词: Program slicingMultiprocessingOperating systemExecution timePointer (computer programming)Programming languageWorkstationComputer scienceUnix

摘要: Illegal pointer and array accesses are a major cause of failure for C programs. We present technique called ‘guarding’ to catch illegal accesses. Our implementation guarding programs works as source-to-source translator. Auxiliary objects guards added user program monitor at run time. Guards maintain attributes out bounds deallocated memory. system has found number previously unreported errors in widely-used Unix utilities SPEC92 benchmarks. Many commonly used have bugs which may not always manifest themselves crash, but instead produce subtly wrong answer. These routinely checked run-time because the increase execution time due checking can be very high. two techniques handle high cost programs: ‘customization’ ‘shadow processing’. Customization by decoupling from original computation. A is customized throwing away computation relevant guarding. explored using slicing customization. cut overhead up half. Shadow processing uses idle processors multiprocessor workstations perform background. instrumented obtain ‘main process’ process’. The main process performs computations orignal program, occasionally communicating few key values shadow process. follows process, sees low – almost less than 10%. © 1997 John Wiley & Sons, Ltd.

参考文章(16)
Thomas Reps, Demonstration of a Prototype Tool for Program Integration University of Wisconsin-Madison Department of Computer Sciences. ,(1989)
Todd M. Austin, Scott E. Breach, Gurindar S. Sohi, Efficient detection of all pointer and array access errors programming language design and implementation. ,vol. 29, pp. 290- 301 ,(1994) , 10.1145/178243.178446
Richard J. Leblanc, Charles N. Fischer, A case study of run-time errors in Pascal programs Software - Practice and Experience. ,vol. 12, pp. 825- 834 ,(1982) , 10.1002/SPE.4380120903
A. Mahmood, E.J. McCluskey, Concurrent error detection using watchdog processors-a survey IEEE Transactions on Computers. ,vol. 37, pp. 160- 174 ,(1988) , 10.1109/12.2145
P.P. Gelsinger, P.A. Gargini, G.H. Parker, A.Y.C. Yu, Microprocessors circa 2000 IEEE Spectrum. ,vol. 26, pp. 43- 47 ,(1989) , 10.1109/6.40684
Ziya Aral, Ilya Gertner, High-level debugging in parasight workshop on parallel & distributed debugging. ,vol. 24, pp. 151- 162 ,(1988) , 10.1145/68210.69230
Barton P. Miller, Louis Fredriksen, Bryan So, An empirical study of the reliability of UNIX utilities Communications of The ACM. ,vol. 33, pp. 32- 44 ,(1990) , 10.1145/96267.96279
Robert Rubin, Larry Rudolph, Dror Zernik, Debugging parallel programs in parallel workshop on parallel & distributed debugging. ,vol. 24, pp. 216- 225 ,(1988) , 10.1145/68210.69236
Priyadarshan Kolte, Michael Wolfe, Elimination of redundant array subscript range checks Proceedings of the ACM SIGPLAN 1995 conference on Programming language design and implementation - PLDI '95. ,vol. 30, pp. 270- 278 ,(1995) , 10.1145/207110.207160
Rajiv Gupta, Optimizing array bound checks using flow analysis ACM Letters on Programming Languages and Systems. ,vol. 2, pp. 135- 150 ,(1993) , 10.1145/176454.176507