CS162B: Assembly and C Jacob T. Chan Objectives ▪ System calls ▪ Relation of System calls to Assembly and C ▪ Special System Calls (exit, write, print, etc.) ▪ Lab 5 Processing… ▪ Some programs take too long to run – Running from console terminal will prevent you from running other programs in the same terminal (until program exits) – Issue when system complains for running too much consoles running ▪ Program vs process? – One solution: put & ▪ Makes program run in background ▪ BUT it does not make the program a daemon (more on this later on) Exit Code ▪ In C/C++, main() method returns 0 (unless there was something wrong) – Same goes for Java’s System.exit() that takes in an int as an argument ▪ This int is usually 0 (unless specified otherwise due to errors) ▪ Exit code or return value is tested by whatever called the program (either by main() or by exit()) – Zero (0) = normal program termination – Non-zero = abnormal termination of program ▪ Cause: ERRORS ▪ Return value may give a hint of what type of error it is System Calls ▪ Layer between user and kernel ▪ Lowest interaction level with O/S ▪ Entry point to the kernel – Should be provided by O/S ▪ Everything else is built on top of the system call ▪ Normally uses C/C++ – Not Java (because system calls only relay signals to JVM) – Java system calls result in OVERHEAD – And besides, JVM is a VIRTUAL MACHINE Categories of System Calls ▪ Process Control ▪ File Manipulation ▪ Signals (obsolete; system calls rely on signals) ▪ Device Management ▪ Information Maintenance ▪ Communications Categories of System Calls ▪ System calls may fall on more than one category – chmod is both file manipulation and system maintenance – abort is process control and signal system call In relation to Assembly and C… ▪ Function calls behave similarly for Assembly code – – – – – CS152a format of function calls is same in Assembly GNU Assembler format will be used for this class AT&T Syntax will be followed Show assembly code in C programs We will assume a 32-bit architecture (not 64-bit) ▪ Might not work. Why? GAS ▪ GNU Assembler files end with .S ▪ Programs in C are converted to assembly then to binary during compiling Registers ▪ ESP, EAX, EDP, etc. are the registers – Remember R0 to R31? ▪ What is the register name for the stack pointer? The base pointer? ▪ GAS code follows Beta assembly code (BSIM) Defining Functions in GAS... ▪ This is just crash course Assembly (it’s gonna take a separate semester if so) ▪ Defining a function myFunc .text .globl myFunc .type myFunc, @function myFunc: # code follows # this is a comment System calls in GAS ▪ Some functions provide kernel-mode only functionality – Just like sudo ▪ To obtain such features, function must issue signal to O/S via interrupt ▪ In Linux, this is achieved by typing int $0x80 Example: Write function ▪ Check out the mySysWrite.S (uploaded in Moodle) ▪ Then add it to C code (and use it like a regular function) extern int myFunc(int fildes,const void *buf, int nbyte); ▪ Compiling the program gcc -o demoProg myProg.c myFunc.S Required: Knowledge ▪ In making system calls, you need: – The number code to be inserted in the eax register before calling interrupt – Arguments to be placed in ebx, ecx, etc. Lab 5: Making Assembly Sys Calls ▪ Implement system calls for opening, closing, reading, writing, and exiting using assembly in C – NOTE: writing is already demonstrated here in C ▪ Write a C program copy.c that makes use of these system calls – This copies specified input file to a specified output file – DO NOT USE the stdio.h library functions for this one (printf/scanf) – Output file is to be named “output.txt” but for input files, assume it’s a .txt file Lab 5: Making Assembly Sys Calls ▪ Include a Certificate of Authorship, your copy.c, and your .S files (open.S, write.S, read.S, close.S, exit.S) ▪ Filename Convention: CS162B_Lab5_<Section>_<Surname>_<ID#>.tar ▪ Deadline: 3 Days after today