C++模板汇编技术

ゝ一世哀愁。 2022-09-09 13:00 62阅读 0赞
  1. //绕过调用参数检查
  2. 元<型名 T>常式 打包大小()
  3. {
  4. 的大小(T);
  5. }
  6. 元<型名 T,型名 U,型名...O>
  7. 常式 打包大小(){
  8. 的大小(T)+打包大小<U,O...>();
  9. }
  10. 元<型名 R,型名...A>
  11. 变调帮
  12. {
  13. k实参大小=打包大小<A...>();
  14. 空*函数;
  15. 空*k中帮助器指令;
  16. 空*本位地址;
  17. 空**跳目标;
  18. R __c声明 跳器(A...a,...)无异;
  19. 元<型名...B>
  20. R 调用(A...a,B...va)无异
  21. {
  22. R 结果;
  23. 实参大小=k实参大小/*可变*/+打包大小<B...>();
  24. 备份跳目标=*跳目标;
  25. __汇编 移动 eax,本位;
  26. __汇编 移动[本位地址],eax;
  27. *跳目标=本位地址;
  28. 跳器(a...,va...);
  29. 本位:
  30. __汇编 esp,[实参大小];
  31. __汇编 移动[结果],eax;
  32. *跳目标=备份跳目标;
  33. 结果;
  34. }
  35. 恢复所有代码分析警告
  36. };
  37. 元<型名 R,型名...A>
  38. 空*变调帮<R,A...>::函数=空针;
  39. 元<型名 R,型名...A>
  40. 空*变调帮<R,A...>::本位地址=空针;
  41. 元<型名 R,型名...A>
  42. 空**变调帮<R,A...>::跳目标=(空**)加游戏(专交反实现直3维编译);
  43. 元<型名 R,型名...A>
  44. 空*变调帮<R,A...>::k中帮助器指令=(常 空*)加游戏(专交反直3维编译);
  45. //游戏假指令,`ESP+0h`必须为游戏码段指令
  46. //|变参 N
  47. //|变参 N-1
  48. //|...
  49. //|变参 1
  50. 元<型名 R,型名...A>
  51. R _声明限定(坦白)__标调用 变调帮<R,A...>::跳器(A...,...)无异
  52. {
  53. __汇编
  54. {
  55. esp,4;
  56. k中帮助器指令;
  57. 函数;//跳
  58. n;
  59. }
  60. }
  61. //调用包装函数
  62. 元<型名 R,型名...A,型名...B>
  63. R 变调包(空*H,A...a,B...va)
  64. {
  65. 包装器型=变调帮<R,A...>;
  66. 包装器型::函数=H;
  67. 包装器型::调用(标::移动(a)...,va...);
  68. }

发表评论

表情:
评论列表 (有 0 条评论,62人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C-汇编(一)

    最近还真是挺忙的,做欢神的小内核实验,读书,学汇编,今天一个朋友问了个问题,  内联函数在传指针参数的时候,有没有拷贝这个指针,然后我就尝试写了个代码,汇编看代码,我去

    相关 mustache模板技术

    一、简介 Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档。当然不同的开发语言有不同模板引擎,如 Ja