Skip to content

Instantly share code, notes, and snippets.

@uroboro
Last active March 4, 2018 22:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save uroboro/b723609964b09fa5378e5e77590dd7e9 to your computer and use it in GitHub Desktop.
Save uroboro/b723609964b09fa5378e5e77590dd7e9 to your computer and use it in GitHub Desktop.
%hookf(FILE *, "fopen", const char *path, const char *mode) {
	NSLog(@"Hey, we're hooking fopen to deny relative paths!");
	if (path[0] != '/') {
		return NULL;
	}
	return %orig; // Call the original implementation of this function
}

./lexis.pl tests/hookf.xm --outputFormat=json

"%"
"hookf"
(
	"FILE"
	"*"
	","
	"""
	"fopen"
	"""
	","
	"const"
	"char"
	"*"
	"path"
	","
	"const"
	"char"
	"*"
	"mode"
)

{
	"NSLog"
	(
		"@"
		"""
		"Hey"
		","
		"we"
		"'"
		"re"
		"hooking"
		"fopen"
		"to"
		"deny"
		"relative"
		"paths"
		"!"
		"""
	)
	";"
	"if"
	(
		"path"
		[
			"0"
		]
		"!"
		"="
		"'"
		"/"
		"'"
	)
	{
		"return"
		"NULL"
		";"
	}
	"return"
	"%"
	"orig"
	";"
	"/"
	"/"
	"Call"
	"the"
	"original"
	"implementation"
	"of"
	"this"
	"function"
}

./lexis.pl tests/hookf.xm --outputFormat=xml

<Core::Node=HASH(0x7f85541b1348) position(O:L:C)=�[34m0000:0000:0000�[m type=�[33mmod  �[m text="%">
<Core::Node=HASH(0x7f85541b1360) position(O:L:C)=�[34m0001:0000:0001�[m type=�[33mlabel�[m text="hookf">
<Core::Node=HASH(0x7f85541bd748) position(O:L:C)=�[34m0006:0000:0006�[m type=�[33mcontainer�[m nodes=(
	<Core::Node=HASH(0x7f85541bfb08) position(O:L:C)=�[34m0007:0000:0007�[m type=�[33mlabel�[m text="FILE">
	<Core::Node=HASH(0x7f85541b7fb0) position(O:L:C)=�[34m0011:0000:0011�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541b7fc8) position(O:L:C)=�[34m0012:0000:0012�[m type=�[33mprod �[m text="*">
	<Core::Node=HASH(0x7f85541b80e8) position(O:L:C)=�[34m0013:0000:0013�[m type=�[33mdel  �[m text=",">
	<Core::Node=HASH(0x7f85541b81c0) position(O:L:C)=�[34m0014:0000:0014�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541b8220) position(O:L:C)=�[34m0015:0000:0015�[m type=�[33mstring�[m text=""">
	<Core::Node=HASH(0x7f85541b82c8) position(O:L:C)=�[34m0016:0000:0016�[m type=�[33mlabel�[m text="fopen">
	<Core::Node=HASH(0x7f85541bfbb0) position(O:L:C)=�[34m0021:0000:0021�[m type=�[33mstring�[m text=""">
	<Core::Node=HASH(0x7f85541b8508) position(O:L:C)=�[34m0022:0000:0022�[m type=�[33mdel  �[m text=",">
	<Core::Node=HASH(0x7f85541bfc10) position(O:L:C)=�[34m0023:0000:0023�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541bfc40) position(O:L:C)=�[34m0024:0000:0024�[m type=�[33mlabel�[m text="const">
	<Core::Node=HASH(0x7f85541b8a60) position(O:L:C)=�[34m0029:0000:0029�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541b8b08) position(O:L:C)=�[34m0030:0000:0030�[m type=�[33mlabel�[m text="char">
	<Core::Node=HASH(0x7f85541b8be0) position(O:L:C)=�[34m0034:0000:0034�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541b8c40) position(O:L:C)=�[34m0035:0000:0035�[m type=�[33mprod �[m text="*">
	<Core::Node=HASH(0x7f85541b8ce8) position(O:L:C)=�[34m0036:0000:0036�[m type=�[33mlabel�[m text="path">
	<Core::Node=HASH(0x7f85541b9f68) position(O:L:C)=�[34m0040:0000:0040�[m type=�[33mdel  �[m text=",">
	<Core::Node=HASH(0x7f85541b9fc8) position(O:L:C)=�[34m0041:0000:0041�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541ba070) position(O:L:C)=�[34m0042:0000:0042�[m type=�[33mlabel�[m text="const">
	<Core::Node=HASH(0x7f85541bfe68) position(O:L:C)=�[34m0047:0000:0047�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541ba4a8) position(O:L:C)=�[34m0048:0000:0048�[m type=�[33mlabel�[m text="char">
	<Core::Node=HASH(0x7f85541ba550) position(O:L:C)=�[34m0052:0000:0052�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541ba6e8) position(O:L:C)=�[34m0053:0000:0053�[m type=�[33mprod �[m text="*">
	<Core::Node=HASH(0x7f85541ba790) position(O:L:C)=�[34m0054:0000:0054�[m type=�[33mlabel�[m text="mode">
)>
<Core::Node=HASH(0x7f85541b3cd8) position(O:L:C)=�[34m0059:0000:0059�[m type=�[33mspace�[m text=" ">
<Core::Node=HASH(0x7f85541b3fc0) position(O:L:C)=�[34m0060:0000:0060�[m type=�[33mcontainer�[m nodes={
	<Core::Node=HASH(0x7f85541c0798) position(O:L:C)=�[34m0061:0000:0061�[m type=�[33mcr   �[m text=\n>
	<Core::Node=HASH(0x7f85541c08d0) position(O:L:C)=�[34m0062:0001:0000�[m type=�[33mspace�[m text=\t>
	<Core::Node=HASH(0x7f85541c0960) position(O:L:C)=�[34m0063:0001:0001�[m type=�[33mlabel�[m text="NSLog">
	<Core::Node=HASH(0x7f85541c0978) position(O:L:C)=�[34m0068:0001:0006�[m type=�[33mcontainer�[m nodes=(
		<Core::Node=HASH(0x7f85541c8b08) position(O:L:C)=�[34m0069:0001:0007�[m type=�[33melse �[m text="@">
		<Core::Node=HASH(0x7f85541c8b20) position(O:L:C)=�[34m0070:0001:0008�[m type=�[33mstring�[m text=""">
		<Core::Node=HASH(0x7f85541c8b38) position(O:L:C)=�[34m0071:0001:0009�[m type=�[33mlabel�[m text="Hey">
		<Core::Node=HASH(0x7f85541c8be0) position(O:L:C)=�[34m0074:0001:0012�[m type=�[33mdel  �[m text=",">
		<Core::Node=HASH(0x7f85541c8c88) position(O:L:C)=�[34m0075:0001:0013�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c8d30) position(O:L:C)=�[34m0076:0001:0014�[m type=�[33mlabel�[m text="we">
		<Core::Node=HASH(0x7f85541c8dd8) position(O:L:C)=�[34m0078:0001:0016�[m type=�[33mchar �[m text="'">
		<Core::Node=HASH(0x7f85541c8e80) position(O:L:C)=�[34m0079:0001:0017�[m type=�[33mlabel�[m text="re">
		<Core::Node=HASH(0x7f85541c8f28) position(O:L:C)=�[34m0081:0001:0019�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c8fd0) position(O:L:C)=�[34m0082:0001:0020�[m type=�[33mlabel�[m text="hooking">
		<Core::Node=HASH(0x7f85541c9078) position(O:L:C)=�[34m0089:0001:0027�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c9120) position(O:L:C)=�[34m0090:0001:0028�[m type=�[33mlabel�[m text="fopen">
		<Core::Node=HASH(0x7f85541c91c8) position(O:L:C)=�[34m0095:0001:0033�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c9270) position(O:L:C)=�[34m0096:0001:0034�[m type=�[33mlabel�[m text="to">
		<Core::Node=HASH(0x7f85541c9318) position(O:L:C)=�[34m0098:0001:0036�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c93c0) position(O:L:C)=�[34m0099:0001:0037�[m type=�[33mlabel�[m text="deny">
		<Core::Node=HASH(0x7f85541c9468) position(O:L:C)=�[34m0103:0001:0041�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c9510) position(O:L:C)=�[34m0104:0001:0042�[m type=�[33mlabel�[m text="relative">
		<Core::Node=HASH(0x7f85541c95b8) position(O:L:C)=�[34m0112:0001:0050�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c9660) position(O:L:C)=�[34m0113:0001:0051�[m type=�[33mlabel�[m text="paths">
		<Core::Node=HASH(0x7f85541c9708) position(O:L:C)=�[34m0118:0001:0056�[m type=�[33mexcl �[m text="!">
		<Core::Node=HASH(0x7f85541c97b0) position(O:L:C)=�[34m0119:0001:0057�[m type=�[33mstring�[m text=""">
	)>
	<Core::Node=HASH(0x7f85541c6360) position(O:L:C)=�[34m0121:0001:0059�[m type=�[33mdel  �[m text=";">
	<Core::Node=HASH(0x7f85541c6510) position(O:L:C)=�[34m0122:0001:0060�[m type=�[33mcr   �[m text=\n>
	<Core::Node=HASH(0x7f85541c6540) position(O:L:C)=�[34m0123:0002:0000�[m type=�[33mspace�[m text=\t>
	<Core::Node=HASH(0x7f85541c6570) position(O:L:C)=�[34m0124:0002:0001�[m type=�[33mlabel�[m text="if">
	<Core::Node=HASH(0x7f85541c6948) position(O:L:C)=�[34m0126:0002:0003�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541c8a18) position(O:L:C)=�[34m0127:0002:0004�[m type=�[33mcontainer�[m nodes=(
		<Core::Node=HASH(0x7f85541c60a8) position(O:L:C)=�[34m0128:0002:0005�[m type=�[33mlabel�[m text="path">
		<Core::Node=HASH(0x7f85541c6048) position(O:L:C)=�[34m0132:0002:0009�[m type=�[33mcontainer�[m nodes=[
			<Core::Node=HASH(0x7f85541c9bc8) position(O:L:C)=�[34m0133:0002:0010�[m type=�[33mnum  �[m text="0">
		]>
		<Core::Node=HASH(0x7f85541c6138) position(O:L:C)=�[34m0135:0002:0012�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c6168) position(O:L:C)=�[34m0136:0002:0013�[m type=�[33mexcl �[m text="!">
		<Core::Node=HASH(0x7f85541c6348) position(O:L:C)=�[34m0137:0002:0014�[m type=�[33midem �[m text="=">
		<Core::Node=HASH(0x7f85541c6330) position(O:L:C)=�[34m0138:0002:0015�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c6300) position(O:L:C)=�[34m0139:0002:0016�[m type=�[33mchar �[m text="'">
		<Core::Node=HASH(0x7f85541c9d00) position(O:L:C)=�[34m0140:0002:0017�[m type=�[33m     �[m text="/">
		<Core::Node=HASH(0x7f85541c9da8) position(O:L:C)=�[34m0141:0002:0018�[m type=�[33mchar �[m text="'">
	)>
	<Core::Node=HASH(0x7f85541c5d60) position(O:L:C)=�[34m0143:0002:0020�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541c5fb8) position(O:L:C)=�[34m0144:0002:0021�[m type=�[33mcontainer�[m nodes={
		<Core::Node=HASH(0x7f85541c5d00) position(O:L:C)=�[34m0145:0002:0022�[m type=�[33mcr   �[m text=\n>
		<Core::Node=HASH(0x7f85541c5e38) position(O:L:C)=�[34m0146:0003:0000�[m type=�[33mspace�[m text=\t	>
		<Core::Node=HASH(0x7f85541c5cb8) position(O:L:C)=�[34m0148:0003:0002�[m type=�[33mlabel�[m text="return">
		<Core::Node=HASH(0x7f85541c6198) position(O:L:C)=�[34m0154:0003:0008�[m type=�[33mspace�[m text=" ">
		<Core::Node=HASH(0x7f85541c9f88) position(O:L:C)=�[34m0155:0003:0009�[m type=�[33mlabel�[m text="NULL">
		<Core::Node=HASH(0x7f85541ca0d8) position(O:L:C)=�[34m0159:0003:0013�[m type=�[33mdel  �[m text=";">
		<Core::Node=HASH(0x7f85541ca180) position(O:L:C)=�[34m0160:0003:0014�[m type=�[33mcr   �[m text=\n>
		<Core::Node=HASH(0x7f85541ca228) position(O:L:C)=�[34m0161:0004:0000�[m type=�[33mspace�[m text=\t>
	}>
	<Core::Node=HASH(0x7f85541c5bc8) position(O:L:C)=�[34m0163:0004:0002�[m type=�[33mcr   �[m text=\n>
	<Core::Node=HASH(0x7f85541c5bb0) position(O:L:C)=�[34m0164:0005:0000�[m type=�[33mspace�[m text=\t>
	<Core::Node=HASH(0x7f85541c5b68) position(O:L:C)=�[34m0165:0005:0001�[m type=�[33mlabel�[m text="return">
	<Core::Node=HASH(0x7f85541c5d30) position(O:L:C)=�[34m0171:0005:0007�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541c5dd8) position(O:L:C)=�[34m0172:0005:0008�[m type=�[33mmod  �[m text="%">
	<Core::Node=HASH(0x7f85541c5f88) position(O:L:C)=�[34m0173:0005:0009�[m type=�[33mlabel�[m text="orig">
	<Core::Node=HASH(0x7f85541c2240) position(O:L:C)=�[34m0177:0005:0013�[m type=�[33mdel  �[m text=";">
	<Core::Node=HASH(0x7f85541c23f0) position(O:L:C)=�[34m0178:0005:0014�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541c2e88) position(O:L:C)=�[34m0179:0005:0015�[m type=�[33m     �[m text="/">
	<Core::Node=HASH(0x7f85541c2f30) position(O:L:C)=�[34m0180:0005:0016�[m type=�[33m     �[m text="/">
	<Core::Node=HASH(0x7f85541c2fd8) position(O:L:C)=�[34m0181:0005:0017�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541c5aa8) position(O:L:C)=�[34m0182:0005:0018�[m type=�[33mlabel�[m text="Call">
	<Core::Node=HASH(0x7f85541c5b50) position(O:L:C)=�[34m0186:0005:0022�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541ca360) position(O:L:C)=�[34m0187:0005:0023�[m type=�[33mlabel�[m text="the">
	<Core::Node=HASH(0x7f85541ca528) position(O:L:C)=�[34m0190:0005:0026�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541ca5d0) position(O:L:C)=�[34m0191:0005:0027�[m type=�[33mlabel�[m text="original">
	<Core::Node=HASH(0x7f85541ca678) position(O:L:C)=�[34m0199:0005:0035�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541ca720) position(O:L:C)=�[34m0200:0005:0036�[m type=�[33mlabel�[m text="implementation">
	<Core::Node=HASH(0x7f85541ca7c8) position(O:L:C)=�[34m0214:0005:0050�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541ca870) position(O:L:C)=�[34m0215:0005:0051�[m type=�[33mlabel�[m text="of">
	<Core::Node=HASH(0x7f85541ca918) position(O:L:C)=�[34m0217:0005:0053�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541ca9c0) position(O:L:C)=�[34m0218:0005:0054�[m type=�[33mlabel�[m text="this">
	<Core::Node=HASH(0x7f85541cba90) position(O:L:C)=�[34m0222:0005:0058�[m type=�[33mspace�[m text=" ">
	<Core::Node=HASH(0x7f85541cbb38) position(O:L:C)=�[34m0223:0005:0059�[m type=�[33mlabel�[m text="function">
	<Core::Node=HASH(0x7f85541cbbe0) position(O:L:C)=�[34m0231:0005:0067�[m type=�[33mcr   �[m text=\n>
}>
<Core::Node=HASH(0x7f85541ba6d0) position(O:L:C)=�[34m0233:0006:0001�[m type=�[33mcr   �[m text=\n>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment