Проверка параметров функции.
?????????? ???? ??? ????????? ??????? ?????? ?? ????????? ????? ??????, ??? ??? ? ??? ????????? ??????? ?????? ???? ????. ??????? ????? ???????? ? ???, ???? ??? ???? ???????? ??????. ????, ??? ??????? ????????? ????????? ???????? ?????? ???? ???, ??? ????? ?, ????? ???????, ??? ?? ????? ??????????
???? ????? ???????????? ?????? ?? ???? ?????? ?? ??????????, ??? ????? ??? ???? ?????? ?????????? ? ??????? coding guidelines, ? ?????????, ??? ????????, ?????????? ????? ???????, ??????? ???? ????????????? ?? ?????. ??? ????? ????. ??? ??????? ????? ??????? ?? ????????? ????????:
- ????? ????????????????, ???????????? ??????? ? ???????????? ?????????;
- ??????? ??????? ?????????? ??????? ? ??????????? ????.
????? ?1 ??, ?? ????????? ????????? ?????, ??????? ?????????? – ???? C/C++, OS – Windows, ????????? – «???????» user/kernel mode ???.
? ??? ????? ?2 ????? ???????? ????????. ??????? ??? ??????:
- ????? ??????? ?????? ?????? ????????? ??????;
- ????? ??????? ???? ?? ????????????????? ????.
? ??????? ?? «???????????» ??????, ?????? ???? ????????????? ?????????, ???:
- ??? ?????? ??????? ????????? ? user space (ProbeXxx ???????);
- ??????/?????? ? user space ??????????? ??????? (??? ???????? ? ???? ?????????? ? ???? try-except);
- ?????? ????? ?????? ?? user space ??????????? ?????? ???? ??? (?????? ?????????? ? ????????? ?????);
- ??? ?????????, ????? ????, ??? ??? ???? ??????????? ? kernel space, ???????? ?????????? ???????? (???????? ?? ????? ?? ??????? ????????? ? ??????).
????????, ??? ?????????????? ???????? ????? ??????, ??? ???????????????? ??? ????? ??????????????, ??? ??? ????, ? ????? ????????? ?????/??????. ????????? ????? ????????, ??? ?????????????? ???????? ?? ????? ???? ????? ??????, ??? ???? ?????? ???????? ?? ????? ?????????????????? ?????????. ? ???, ?????? ??? ????? – ???? ????.
?????, ?????? ??????? ?? ???????????? ???? ?? ????. ?????? ?????? ????????????? ? ????? «?????????». ??????????? ????? ???? ???????? ???????????, ???????? ?????? ??? ?????????? ???? «int», ??? ?????? ??????, ???????? TCP ????? ????????????? ? IP ?????. ??????? ????????? ???????? ??????????? ?????????? ? ???????? ??????????? ??????. ? ??????? ????, ?????? ??1 – 3 ???????????? ?? ??? ????, ??? ???????? ??????????? ?????????? (?????? ? user space). ???????? ??????????? ????? ?????? ???????????? ???????????? ??????? ?4.
????? ?? ??? ?????? ?????? ????????? ??? ????????? ??????? - ???. ????? ???????? ????? ????????? ? ??????????? ??????? ? ??????? ??????? ? ???????? ?????? ??????, ????? ???????, ??? ???????? ?????????? ? ??????? ?? ?????????. ? ???? ? ?????????, ?? ?????? ??? ???????????? ??????? ????????, ??????? ?? ??? ????? ?? ? ????????? ?????????????? (? ???????? ??????? ??????). ??????????????, ??? «??????????» ?????? ????????? ??????????? ?????????? ???????????????.
???? ????????? ?? ??????????? ???????????, ??? ???????? ??? ??????????? ?????????? ??? «??????????» ?????? ?? ???????????. ????? ????, ????? ???????? ????? ???? ??????, ??? ??? ?????????? ????? ??????, ????? ??????? ????????????? ????????????? ??????????.
?????????? ???????? ??????????? ????? ?????? ???? ????? ????????? ?? ???????? – ?? ?????. ? ??????, ???????. ??? ????? ???????????? ?????? ??????? ?????? (Data Flow Analysis, DFD), ???? ???????? ??????? ? ???, ???:
- ???????????????? ??? ????????? ?????? ??????? (?.?. ??? ?????????? ???? ? ??????? ?????????);
- ???????????? ???????? ???????????? ??????, ? ?????, ?????? ? ???? ??? ??????????;
- ???????????? ??????? ??????????????????? ??????? ????????? ?????? ???????.
???????? ?????? ?? ????? ?????????????????? ? ????? ?????????????????? ????????? ????????? ????????? ????? ??????? ??????? (Trust Boundary), ??? ??????? ??????????? ??????? ?????? ????????? ??????????? ?????????? ??????, ??????? ??? ??????????? ??????????, ??? ? ??????????? ??????. ??? ??????????? DFD ????????? ??????? ???????, ??? ?????? (????????, IP ?????) ????? ???? ????????? ? ???? ?????????? ??? ??????? ??????????. ? ????? ??????, ??? ????????????????? ?????? ??????? ??????? ????? ????????? ?? ???? ??? ????????? ??????????? ??????.
????, ??????:
- ??????? ????????? ????????? ? ???? ??????, ? ????????, ??? ???????? ?? ??????????? ????? ??????????? ??????? ????????????;
- ???????? ??????????? ?????????? ??????????? ?????? ? ??????, ???? ???????? ?????? ???? ????? ??????? ???????. DFD ????????? ?????? ?????? ? ??????????? ???? ?????? ???????;
- ???????? ??????????? ?????? ???????????? ?????? ???????????? ???? ??????.
Cross-posted from blog.not-a-kernel-guy.com.