Closures/Value capture: Difference between revisions

No edit summary
Line 26:
 
<lang c>#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <sys/mman.h>
 
typedef int (*f_int)();
 
#define TAG 0xdeadbeef
int _tmpl() {
Line 37 ⟶ 38:
}
 
#define PROT (PROT_EXEC | PROT_WRITE)
#define FLAGS (MAP_PRIVATE | MAP_ANONYMOUS)
f_int dupf(int v)
{
size_t len = (void*)dupf - (void*)_tmpl;
f_int ret = mallocmmap(NULL, len, PROT, FLAGS, 0, 0);
char *p;
if(ret == MAP_FAILED) {
perror("mmap");
exit(-1);
}
memcpy(ret, _tmpl, len);
for (p = (char*)ret; p < (char*)ret + len - sizeof(int); p++)
Line 47 ⟶ 54:
return ret;
}
 
int main()
{
Line 53 ⟶ 60:
int i;
for (i = 0; i < 10; i++) funcs[i] = dupf(i);
 
for (i = 0; i < 9; i++)
printf("func[%d]: %d\n", i, funcs[i]());
 
return 0;
}</lang>output<lang>func[0]: 0
Anonymous user